可能重复:
带请求正文的HTTP GET
我在这里看过几个不提倡通过HTTP GET发送内容的讨论.可以通过客户端(Web浏览器)发送的数据大小有限制.处理GET数据也取决于服务器.请参阅 以下资源部分.
但是,我被要求测试使用RestTemplate通过HTTP GET发送内容的可能性.我在春季论坛上几乎没有讨论,但没有回答.(请注意通过http Post发送数据工作正常).这里的讨论建议使用POST.
dev env - 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());
}
Run Code Online (Sandbox Code Playgroud)
服务器 @Controller
@RequestMapping(value = "/{id}/body", method = RequestMethod.GET)
public @ResponseBody
String testGetWithBody(@PathVariable String id,
@RequestBody String bodyContent)
{
return id + bodyContent;
}
Run Code Online (Sandbox Code Playgroud)
问题 - 执行此测试用例会返回500内部服务器错误.在调试时,我发现控制器没有命中.
理解RestTemplate提供了将数据作为请求体发送的方式是否正确,但是因为服务器无法处理请求体而发生错误?
如果通过HTTP Get发送的请求体不是常规的,为什么RestTemplate会提供允许发送它的API?这是否意味着很少有服务器能够通过GET处理Request主体?
资源 - 在Spring论坛上使用RestTemplate通过HTTP GET发送正文的讨论
资源 - 关于通过HTTP GET发送正文的一般性讨论
理解RestTemplate提供了将数据作为请求体发送的方式是否正确,但是因为服务器无法处理请求体而发生错误?
您可以通过查看网络流量(请求是否通过请求正文和GET方法发送?)和服务器日志来判断(您收到的500结果必须具有记录的服务器端效果,如果没有,请配置服务器这样做).
如果通过HTTP Get发送的请求体不是常规的,为什么RestTemplate会提供允许发送它的API?这是否意味着很少有服务器能够通过GET处理Request主体?
因为它是一个泛型类,它还允许您创建可以包含消息体的请求.
换句话说,任何HTTP请求消息都允许包含消息体,因此[服务器]必须解析消息.但是,GET的服务器语义受到限制,使得正文(如果有的话)对请求没有语义含义.解析的要求与方法语义的要求是分开的.
GET上的主体无法在语义上执行任何操作,因为您正在请求资源.这就像你告诉服务器:"给我资源X,哦,还有一些苹果!" .服务器不关心你的苹果并愉快地提供资源X - 或者因为它不喜欢请求中的任何提议而抛出错误.
但是,我被要求测试通过HTTP GET发送内容的可能性
请告诉那个请求这个的人,这是一个不应该被测试的情况,因为没有合理的实现支持它.
| 归档时间: |
|
| 查看次数: |
46795 次 |
| 最近记录: |