one of the few questions (with answers) में मैंने जेएक्स-आरएस और कैशिंग के संबंध में एसओ पर पाया है, ईटैग (कैशिंग के लिए) उत्पन्न करने का उत्तर प्रतिक्रिया वस्तु पर कुछ मूल्य निर्धारित कर रहा है। में के रूप में निम्नलिखित:प्रतिक्रिया ऑब्जेक्ट्स का उपयोग किए बिना जेएक्स-आरएस का उपयोग करके ईटैग सेट करना संभव है?
@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();
}
समस्या यह है कि हमारे लिए काम नहीं करेगा, क्योंकि हम, दोनों सोप के लिए एक ही तरीके का इस्तेमाल करते हैं और सेवाओं REST @WebMethod (SOAP), @GET साथ तरीकों व्याख्या द्वारा (और सेवा को बेनकाब करने के लिए हमें और भी कुछ भी चाहिए)। पिछली सेवा हमें ऐसा दिखाई देगा (हेडर के निर्माण को छोड़कर):
@WebMethod
@GET
@Path("/person/{id}")
public Person getPerson(@WebParam(name="id") @PathParam("id") String name){
return _dao.getPerson(name);
}
वहाँ कोई तरीका है - कुछ अतिरिक्त विन्यास के माध्यम से - उन हेडर स्थापित करने की? यह पहली बार है जब मैंने पाया है कि प्रतिक्रिया ऑब्जेक्ट्स का उपयोग करने से वास्तव में केवल ऑटो-रूपांतरण पर कुछ लाभ होता है ...
हम अपाचे सीएक्सएफ का उपयोग कर रहे हैं।
क्या मैं संभवतः किसी प्रकार का इंटरसेप्टर का उपयोग कर सकता हूं? http://stackoverflow.com/questions/3165647/apache-cxf-how-to-add-custom-http-header-to-jax-rs-response?rq=1 – oligofren