private ResponseBuilder evaluateIfNonMatch(EntityTag eTag, Date lastModified) { List<String> ifNonMatch = headers.getRequestHeader(HttpHeaders.IF_NONE_MATCH); if (ifNonMatch == null || ifNonMatch.isEmpty()) { return lastModified == null ? null : evaluateIfModifiedSince(lastModified); } String method = getMethod(); boolean getOrHead = HttpMethod.GET.equals(method) || HttpMethod.HEAD.equals(method); try { for (String value : ifNonMatch) { boolean result = "*".equals(value); if (!result) { EntityTag requestTag = EntityTag.valueOf(value); result = getOrHead ? requestTag.equals(eTag) : !requestTag.isWeak() && !eTag.isWeak() && requestTag.equals(eTag); } if (result) { Response.Status status = getOrHead ? Response.Status.NOT_MODIFIED : Response.Status.PRECONDITION_FAILED; return Response.status(status).tag(eTag); } } } catch (IllegalArgumentException ex) { // ignore } return null; }
private ResponseBuilder evaluateIfNonMatch(EntityTag eTag, Date lastModified) { List<String> ifNonMatch = headers.getRequestHeader(HttpHeaders.IF_NONE_MATCH); if (ifNonMatch == null || ifNonMatch.size() == 0) { return lastModified == null ? null : evaluateIfModifiedSince(lastModified); } String method = getMethod(); boolean getOrHead = HttpMethod.GET.equals(method) || HttpMethod.HEAD.equals(method); try { for (String value : ifNonMatch) { boolean result = "*".equals(value); if (!result) { EntityTag requestTag = EntityTag.valueOf(value); result = getOrHead ? requestTag.equals(eTag) : !requestTag.isWeak() && !eTag.isWeak() && requestTag.equals(eTag); } if (result) { Response.Status status = getOrHead ? Response.Status.NOT_MODIFIED : Response.Status.PRECONDITION_FAILED; return Response.status(status).tag(eTag); } } } catch (IllegalArgumentException ex) { // ignore } return null; }