2013-07-26 12 views
22

मैं निम्नलिखित प्राप्त करने की कोशिश कर रहा हूं।कस्टम प्रतिक्रिया शीर्षलेख जर्सी/जावा

अनुरोध से एक कस्टम हेडर और अपने मूल्य पढ़ें:

name: username 

अब, प्रतिक्रिया पर, मैं HTTP प्रतिक्रिया में एक ही हेडर name:value जोड़ी वापस जाने के लिए चाहते हैं।

मैं जेएक्स-आरएस webservice के जर्सी 2.0 कार्यान्वयन का उपयोग कर रहा हूं।

जब मैं अनुरोध यूआरएल Http://localhost/test/ भेजता हूं, अनुरोध हेडर भी पास किए जाते हैं (समय के लिए, हालांकि फ़ायरफ़ॉक्स प्लगइन - उन्हें हार्डकोडिंग)।

कि URL के अनुरोध प्राप्त होने पर निम्न विधि शुरू हो जाती है:

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public UserClass getValues(@Context HttpHeaders header) { 
    MultivaluedMap<String, String> headerParams = header.getRequestHeaders(); 
    String userKey = "name"; 
    headerParams.get(userKey); 

    // ... 

    return user_object; 
} 

मैं यह कैसे प्राप्त कर सकता है? कोई संकेतक महान होगा!

उत्तर

30

बस एक विधि तर्क के रूप में @Context HttpServletResponse response इंजेक्ट करें। कि

@Produces(MediaType.APPLICATION_JSON) 
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) { 
    response.setHeader("yourheadername", "yourheadervalue"); 
    ... 
} 
+1

क्या मुझे अतिरिक्त पुस्तकालय जोड़ने की आवश्यकता है? यह अज्ञात वर्ग "HttpServletResponse" कहता है। – Namenoobie

+0

@Namenoobie आपको सर्वर रनटाइम लाइब्रेरी की आवश्यकता है। यह मूल रूप से सर्वलेट एपीआई है। यदि आप ग्रहण पर हैं, तो अपने प्रोजेक्ट जावा बिल्डपैथ पर जाएं और लाइब्रेरी जोड़ें। –

+0

जब मैं निर्देश का पालन करता हूं, तो मुझे टॉमकैट सर्वर मिलता है जो मेरी स्थानीय मशीन पर पहले से मौजूद है। – Namenoobie

2

Response (जेएक्स-आरएस से एक वर्ग) UserClass इकाई के रूप में लौटें। Response पर आप HTTP शीर्षलेख सेट कर सकते हैं।

+2

मुझे खेद है, मैं इसका पालन नहीं करता हूं। क्या आप विस्तारित कर सकते हैं? – Namenoobie

44

मैं javax.ws.rs.core.Response का उपयोग कर लगता है पर हेडर बदले और अधिक सुरुचिपूर्ण है और यह जर्सी का एक हिस्सा है। पिछले जवाब को विस्तारित करने के लिए, यहां एक साधारण उदाहरण है:

@GET 
    @Produces({ MediaType.APPLICATION_JSON }) 
    @Path("/values") 
    public Response getValues(String body) { 

     //Prepare your entity 

     Response response = Response.status(200). 
       entity(yourEntity). 
       header("yourHeaderName", "yourHeaderValue").build(); 

     return response; 
    } 
+4

यह चयनित उत्तर होना चाहिए। – reinaldoluckman

+5

इसे '.ok' के साथ' .status (200) .entity' को और भी सरल बनाने के लिए। –

+0

यह [swagger codegen] (https://github.com/swagger-api/swagger-codegen) का उपयोग कर स्वचालित API दस्तावेज़ पीढ़ी के साथ समस्याएं पैदा कर सकता है। – koppor

संबंधित मुद्दे