Ist es möglich, ETags mit JAX-RS, ohne auf die Response-Objekte?

In eine der wenigen Fragen (mit Antworten) gefunden habe ich SO über JAX-RS und caching, die Antwort auf die Generierung von ETags (für caching) wird durch das setzen einiger Werte auf das Response-Objekt. Wie in der folgenden:

@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();
}

Das problem ist, dass nicht die Arbeit für uns, denn wir verwenden die gleichen Methoden für beide SOAP-und REST-services, von Anmerkungen zu den Methoden, die mit @WebMethod (SOAP), @GET (und was wir sonst noch benötigen könnten, um Zugang zu den service). Die bisherigen service Aussehen würde, wie dies zu uns (mit Ausnahme der Erstellung des headers):

@WebMethod
@GET
@Path("/person/{id}")
public Person getPerson(@WebParam(name="id") @PathParam("id") String name){
  return _dao.getPerson(name);
}

Gibt es eine Möglichkeit - durch einige zusätzliche Konfigurations - Einstellung werden diese Header? Dies ist das erste mal, habe ich gefunden, dass die Verwendung von Response-Objekten hat tatsächlich einige Vorteile gegenüber der nur mit auto-Konvertierung ...

Sind wir mit Apache CXF.

InformationsquelleAutor oligofren | 2012-07-03
Schreibe einen Kommentar