thể trùng lặp:
HTTP GET with request bodyXuân RestTemplate - http GET với yêu cầu cơ thể
Tôi đã đọc vài cuộc thảo luận ở đây mà không chủ trương gửi nội dung qua HTTP GET. Có những hạn chế về kích thước của dữ liệu có thể được gửi qua máy khách (trình duyệt web). Và việc xử lý dữ liệu GET cũng phụ thuộc vào các máy chủ. Vui lòng tham khảo phần Tài nguyên bên dưới.
Tuy nhiên, tôi đã được yêu cầu kiểm tra khả năng gửi nội dung qua HTTP GET bằng cách sử dụng RestTemplate. Tôi đã giới thiệu vài cuộc thảo luận trên diễn đàn mùa xuân nhưng họ không được trả lời. (Xin lưu ý gửi dữ liệu qua http Post hoạt động tốt). Cuộc thảo luận here đề xuất sử dụng POST thay thế.
dev env - JBoss AS 5.1, Spring 3.1.3
Khách hàng
@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());
}
server @Controller
@RequestMapping(value = "/{id}/body", method = RequestMethod.GET)
public @ResponseBody
String testGetWithBody(@PathVariable String id,
@RequestBody String bodyContent)
{
return id + bodyContent;
}
Vấn đề - thực hiện xét nghiệm này trường hợp trả về 50 0 Lỗi máy chủ nội bộ. Khi gỡ lỗi, tôi thấy rằng bộ điều khiển không bị trúng.
Là nó đúng để hiểu rằng RestTemplate cung cấp cách thức để gửi dữ liệu theo yêu cầu của cơ thể, nhưng các lỗi xảy ra do máy chủ không thể xử lý yêu cầu của cơ thể?
Nếu nội dung yêu cầu được gửi qua HTTP Nhận không phải là quy ước tại sao RestTemplate cung cấp API để cho phép gửi? Điều này có nghĩa là có rất ít máy chủ có khả năng xử lý phần thân Yêu cầu qua GET?
Tài - thảo luận về việc gửi cơ thể thông qua HTTP GET sử dụng RestTemplate tại diễn đàn mùa xuân
Resourc es - thảo luận chung về gửi cơ thể thông qua HTTP GET
is-this-statement-correct-http-get-method-always-has-no-message-body
get-or-post-when-reading-request-body
vì không được phép đăng câu trả lời trong các câu hỏi được đánh dấu là trùng lặp, tôi sẽ thực hiện ở đây vì đã dành rất nhiều thời gian để tìm ra cách làm như thế nào Bạn có thể làm cho RestTemplate thực hiện yêu cầu GET với cơ thể bằng cách sử dụng nó trên apache http client với một số điều chỉnh: – LifeIsGoodMF
lớp HttpGetWithBody mở rộng HttpEntityEnclosingRequestBase { HttpGetWithBody (URI cuối cùng uri) { setURI (uri); } @Override chuỗi công khai getMethod() { trả lại HttpGet.METHOD_NAME; }} – LifeIsGoodMF
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory() {@Override bảo vệ HttpUriRequest createHttpUriRequest (HttpMethod httpMethod, URI uri) { if (httpMethod == HttpMethod.GET) { trở HttpGetWithBody mới (uri); } trả lại super.createHttpUriRequest (httpMethod, uri); } }; – LifeIsGoodMF