स्प्रिंग MVC REST कंट्रोलर में HTTP हेडर की जानकारी कैसे प्राप्त करें?


154

मैं विशेष रूप से जावा में सामान्य रूप से वेब प्रोग्रामिंग के लिए नया हूं, इसलिए मैंने अभी सीखा कि हेडर और बॉडी क्या है।

मैं स्प्रिंग एमवीसी का उपयोग करके रेस्टफुल सेवाएं लिख रहा हूं। मैं @RequestMappingअपने नियंत्रकों के साथ सरल सेवाएं बनाने में सक्षम हूं। मुझे यह समझने में सहायता की आवश्यकता है कि मेरे REST सेवा नियंत्रक में मेरे तरीके से आने वाले अनुरोध से HTTP हेडर जानकारी कैसे प्राप्त करें। मैं शीर्ष लेख को पार्स करना चाहूंगा और इससे कुछ विशेषताएँ प्राप्त करूंगा।

क्या आप बता सकते हैं कि मैं उस जानकारी को कैसे प्राप्त कर सकता हूँ?

जवाबों:


264

जब आप किसी पैरामीटर को एनोटेट करते हैं @RequestHeader, तो पैरामीटर हेडर सूचना को पुनः प्राप्त करता है। तो आप ऐसा कुछ कर सकते हैं:

@RequestHeader("Accept")

Acceptहेडर पाने के लिए ।

तो प्रलेखन से :

@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
                              @RequestHeader("Keep-Alive") long keepAlive)  {

}

Accept-Encodingऔर Keep-Aliveहैडर मूल्यों में प्रदान की जाती हैं encodingऔर keepAliveक्रमशः पैरामीटर।

और कोई चिंता नहीं। हम सभी कुछ के साथ नोक हैं।


धन्यवाद। जिस कंपनी के लिए मैं काम करता हूं, उसमें कुछ कोड उदाहरणों में, मैं पैरामीटर के रूप में HttpServletRequest देखता हूं और उस पर एक गेटहेडर विधि है। कौन सा दृष्टिकोण बेहतर है?
हॉर्स वॉयस

1
एक एपीआई के निम्न-स्तरीय विवरण के लिए सार को प्राथमिकता दें। मैं बहुत बल्कि स्प्रिंग एमवीसी को Servletएपीआई के विवरण से दूर करूंगा । मैं एनोटेशन का उपयोग कर सकता हूं कि मुझे अनुरोध से बाहर क्या चाहिए।
विद्या

6
उल्लेख करना चाहिए, यदि आपको अनुरोध में ऐसा हेडर नहीं होगा तो आपको प्रतिक्रिया के रूप में 400 खराब अनुरोध त्रुटि मिलेगी। अधिक लचीले तरीके से हेडर का अनुरोध करने के लिए सीधी पहुंच है जैसा कि इसमें वर्णित है: stackoverflow.com/a/28209710/1828296
lospejos

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं, लेकिन एक 400 प्रतिक्रिया वह व्यवहार है जो मैं उस मामले में लगभग हमेशा चाहता हूं।
विद्या

@lospejos कि requiredझंडा का उपयोग करके बचा जा सकता है @RequestHeader(name = "Keep-Alive", required = false) long keepAliveकि अगर उपलब्ध नहीं है रखने के लिए अशक्त रख देंगे। defaultValueएनोटेशन docs.spring.io/spring-framework/docs/5.0.7.RELEASE/javadoc-api/… के
निकोलो

88

आप सभी अनुरोध शीर्ष लेखों तक पहुँच प्राप्त करने के लिए विधि पैरामीटर के @RequestHeaderसाथ एनोटेशन का उपयोग कर सकते हैं HttpHeaders:

@RequestMapping(value = "/restURL")
public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
    // Use headers to get the information about all the request headers
    long contentLength = headers.getContentLength();
    // ...
    StreamSource source = new StreamSource(new StringReader(body));
    YourObject obj = (YourObject) jaxb2Mashaller.unmarshal(source);
    // ...
}

Http अनुरोध के मुख्य भाग के बारे में क्या? मैं शीर्ष लेख विशिष्टताओं का उपयोग कैसे करूं? क्या आप मुझे समझा सकते हैं कि HttpHeaders एक ऐसा मानचित्र है जिसे मुझे एक्सेस करने के लिए एक कुंजी की आवश्यकता है?
हॉर्स वॉयस

HttpHeaders में हेडर की बारीकियों को पाने के लिए गेटर्स हैं। आप विवरण प्राप्त करने के लिए इस लिंक का पता लगा सकते हैं: docs.spring.io/spring/docs/3.1.x/javadoc-api/org//-
सैकिया

मेरे अनुरोध को यह दिखाने के लिए संपादित करें कि आप अनुरोध निकाय तक कैसे पहुँच सकते हैं।
देबोजीत सैकिया

1
धाराओं की आवश्यकता क्यों है? यह बहुत जटिल लगता है। धाराओं आदि का उपयोग करने के लिए एक आसान तरीका होना चाहिए
हॉर्स वॉयस

यहाँ StringReaderआने वाले चरित्र स्ट्रीम को पढ़ने के लिए उपयोग किया जाता है। StreamSourceXML मार्कअप की एक धारा के रूप में एक परिवर्तन स्रोत के लिए एक धारक के रूप में काम करता है।
देबोजीत सैकिया

14

उदाहरण के साथ हेडर मापदंडों में मेरा समाधान उपयोगकर्ता है = "परीक्षण" है:

@RequestMapping(value = "/restURL")
  public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers){

System.out.println(headers.get("user"));
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.