Подтвердить что ты не робот

Как использовать кеширование CXF, JAX-RS и HTTP

Документация CXF упоминает кеширование как Advanced HTTP:

CXF JAXRS обеспечивает поддержку нескольких расширенных функций HTTP, обрабатывая заголовки If-Match, If-Modified-Since и ETags. Объект контекстного запроса JAXRS можно использовать для проверки предварительных условий. Vary, CacheControl, Cookies и Set-Cookies также поддерживаются.

Мне действительно интересно использовать (или, по крайней мере, изучать) эти функции. Однако, хотя звук "обеспечивает поддержку" действительно интересен, он не особенно полезен при реализации таких функций. Любая помощь или указатели на использование If-Modified-Since, CacheControl или ETags?

4b9b3361

Ответ 1

Собственно, ответ не специфичен для CXF - это чистый JAX-RS:

// IPersonService.java
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;

@GET
@Path("/person/{id}")
Response getPerson(@PathParam("id") String id, @Context Request request);


// PersonServiceImpl.java
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

public Response getPerson(String name, Request request) {
  Person person = _dao.getPerson(name);

  if (person == null) {
    return Response.noContent().build();
  }

  EntityTag eTag = new EntityTag(person.getUUID() + "-" + person.getVersion());

  CacheControl cc = new CacheControl();
  cc.setMaxAge(600);

  ResponseBuilder builder = request.evaluatePreconditions(person.getUpdated(), eTag);

  if (builder == null) {
    builder = Response.ok(person);
  }

  return builder.cacheControl(cc).lastModified(person.getUpdated()).build();
}

Ответ 2

С предстоящим JAX-RS 2.0 можно будет применять Cache-Control декларативно, как описано в http://jalg.net/2012/09/declarative-cache-control-with-jax-rs-2-0/

Вы уже можете проверить это, по крайней мере, с Джерси. Однако не уверены в CXF и RESTEasy.