可能重复:
带有请求正文的 HTTP GET
我在这里阅读了一些不提倡通过 HTTP GET 发送内容的讨论。可以通过客户端(Web 浏览器)发送的数据大小存在限制。处理 GET 数据也依赖于服务器。请参阅下面的资源部分 。
但是,我被要求测试使用 RestTemplate 通过 HTTP GET 发送内容的可能性。我在春季论坛上提到了一些讨论,但没有得到答复。(请注意通过 http Post 发送数据可以正常工作)。这里的讨论建议改用 POST。
开发环境 - JBoss AS 5.1,Spring 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;
}
问题- 执行此测试用例返回 500 Internal Server Error。在调试时,我发现控制器没有被击中。
理解 RestTemplate 提供了将数据作为请求正文发送的方式是否正确,但是由于服务器无法处理请求正文而发生错误?
如果通过 HTTP Get 发送的请求正文不是传统的,为什么 RestTemplate 提供 API 来允许发送它?这是否意味着很少有服务器能够通过 GET 处理请求正文?
资源- 在春季论坛上使用 RestTemplate 通过 HTTP GET 发送正文的讨论
资源- 关于通过 HTTP GET 发送正文的一般讨论
is-this-statement-correct-http-get-method-always-has-no-message-body