संभव डुप्लिकेट:
HTTP GET with request bodyस्प्रिंग RestTemplate - http अनुरोध शरीर के साथ प्राप्त
मैं कुछ विचार विमर्श यहाँ पढ़ा है जो HTTP GET के माध्यम से सामग्री भेजने वकालत नहीं करते। डेटा के आकार पर प्रतिबंध हैं जिन्हें ग्राहकों (वेब ब्राउज़र) के माध्यम से भेजा जा सकता है। और जीईटी डेटा को संभालने से सर्वर पर भी निर्भर करता है। कृपया नीचे दिए गए अनुभाग संसाधन देखें।
हालांकि, मुझे RestTemplate का उपयोग करके HTTP GET के माध्यम से सामग्री भेजने की संभावना का परीक्षण करने के लिए कहा गया है। मैंने वसंत मंच पर कुछ चर्चाएं की लेकिन उन्हें जवाब नहीं दिया गया। (कृपया http पोस्ट के माध्यम से डेटा भेजना ठीक है)। चर्चा here इसके बजाय POST का उपयोग करने का सुझाव देता है।
देव env - JBoss 5.1 के रूप में, वसंत 3.1.3
ग्राहक
@Test
public void testGetWithBody()
{
// acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.TEXT_PLAIN);
// header
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
// body
String body = "hello world";
HttpEntity<String> entity = new HttpEntity<String>(body, headers);
Map<String, Object> uriVariables = new HashMap<String, Object>();
uriVariables.put("id", "testFile");
// Send the request as GET
ResponseEntity<String> result = restTemplate.exchange(
"http://localhost:8080/WebApp/test/{id}/body",
HttpMethod.GET, entity, String.class, uriVariables);
Assert.assertNotNull(result.getBody());
}
सर्वर @Controller
@RequestMapping(value = "/{id}/body", method = RequestMethod.GET)
public @ResponseBody
String testGetWithBody(@PathVariable String id,
@RequestBody String bodyContent)
{
return id + bodyContent;
}
समस्या - इस परीक्षण को क्रियान्वित मामला 50 देता है 0 आंतरिक सर्वर त्रुटि। डिबगिंग पर, मैंने पाया कि नियंत्रक हिट नहीं हुआ है।
यह समझना महत्वपूर्ण है कि RestTemplate तरह से अनुरोध निकाय के रूप में डेटा भेजने के लिए प्रदान करता है, लेकिन त्रुटि तब होती है क्योंकि सर्वर अनुरोध शरीर नहीं संभाल सकता सही है?
यदि HTTP प्राप्त के माध्यम से भेजा गया अनुरोध निकाय पारंपरिक नहीं है तो RestTemplate एपीआई को इसे भेजने की अनुमति देने के लिए क्यों प्रदान करता है? क्या इसका मतलब है कि जीईटी के माध्यम से अनुरोध निकाय को संभालने में सक्षम कुछ सर्वर हैं?
संसाधन - HTTP GET के माध्यम से शरीर को भेजने वसंत मंच
resourc पर RestTemplate का उपयोग करने पर विचार विमर्श तों - HTTP के माध्यम से शरीर को भेजने पर विचार विमर्श जनरल प्राप्त
is-this-statement-correct-http-get-method-always-has-no-message-body
get-or-post-when-reading-request-body
डुप्लिकेट के रूप में चिह्नित प्रश्नों में पोस्ट उत्तरों की अनुमति नहीं है, इसलिए मैं इसे कैसे कर सकता हूं यह जानने के लिए कि कितना समय लगता है आप RestTemplate को अपाचे http क्लाइंट पर इसका उपयोग करके शरीर के साथ अनुरोध प्राप्त कर सकते हैं कुछ ट्यूनिंग के साथ: – LifeIsGoodMF
कक्षा HttpGetWithBody HttpEntityEnclosingRequestBase { HttpGetWithBody (अंतिम यूआरआई यूरी) { setURI (uri); } @ ओवरराइड सार्वजनिक स्ट्रिंग getMethod() { वापसी HttpGet.METHOD_NAME; } } – LifeIsGoodMF
HttpComponentsClientHttpRequestFactory requestFactory = नए HttpComponentsClientHttpRequestFactory() { @Override संरक्षित HttpUriRequest createHttpUriRequest (HttpMethod httpMethod, यूआरआई uri) { अगर (httpMethod == HttpMethod.GET) { नई HttpGetWithBody (URI) वापसी; } वापसी super.createHttpUriRequest (httpMethod, uri); } }; – LifeIsGoodMF