Можно ли установить ETag с помощью JAX -RS, не прибегая к объектам Response?

В один из немногих вопросов (с ответами)Я нашел на 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.

12
задан Community 23 May 2017 в 11:48
поделиться