В один из немногих вопросов (с ответами)Я нашел на SO, касающемся JAX -RS и кэширования, ответ на создание ETags (для кэширования )заключается в установке некоторых значений для объекта Response. Как и в следующем:
@GET
@Path("/person/{id}")
public Response getPerson(@PathParam("id") String name, @Context 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();
}
Проблема в том, что это не сработает для нас, поскольку мы используем одни и те же методы для служб SOAP и REST, аннотируя методы с помощью @WebMethod (, SOAP ), @GET (и всего, что нам может понадобиться. выставить сервис ). Предыдущий сервис выглядел бы для нас так (без учета создания заголовков):
@WebMethod
@GET
@Path("/person/{id}")
public Person getPerson(@WebParam(name="id") @PathParam("id") String name){
return _dao.getPerson(name);
}
Есть ли способ -с помощью дополнительной конфигурации -для установки этих заголовков? Это первый раз, когда я обнаружил, что использование объектов Response на самом деле имеет некоторое преимущество перед просто автоматическим -преобразованием...
Мы используем Apache CXF.