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.
- Könnte ich möglicherweise verwenden Sie irgendeine Art von Interceptor? stackoverflow.com/questions/3165647/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie könnten in der Lage sein zu verwenden, Abfangjäger zu erreichen, wenn Sie könnten erzeugen der E-tag-NACH-erstellen Sie Ihre response-Objekt.
Wenn sich dieser Weg nicht tragfähig, würde ich die original-Lösung, die Sie geschrieben, und fügen Sie die Person, die Person, die den generator:
oder es kann so einfach wie das senden wieder einen "Fehler" - code... je nachdem, was Sie tun möchten.
Das ist, wie ich angenommen issure sowieso. Viel Glück! (Verwenden Sie Spring MVC statt.... es ist eine aus der box-filter, der macht ALLES für Sie... auch eine gute ETag 🙂 )
Könnten Sie überlegen, ein Response-Filter. Ich entwickelte einen Geruch Bibliothek tut genau das, was Sie suchen: https://github.com/tobilarscheid/jaxrs-etag-filter