带请求正文的http GET
可能重复:
带请求正文的HTTP GET
我在这里读了几个讨论,不主张通过HTTP GET发送内容。 可以通过客户端(网络浏览器)发送的数据大小有限制。 处理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());
}
服务器 @控制器
@RequestMapping(value = "/{id}/body", method = RequestMethod.GET)
public @ResponseBody
String testGetWithBody(@PathVariable String id,
@RequestBody String bodyContent)
{
return id + bodyContent;
}
问题 - 执行此测试用例返回500内部服务器错误。 在调试时,我发现控制器没有被击中。
理解RestTemplate提供将数据作为请求主体发送的方式是正确的,但是由于服务器无法处理请求主体而发生错误?
如果通过HTTP Get发送的请求体不是常规的,RestTemplate为什么会提供API来允许发送它? 这是否意味着很少有服务器能够通过GET处理请求主体?
资源 - 讨论在春季论坛上使用RestTemplate通过HTTP GET发送主体
http://forum.springsource.org/showthread.php?129510-Message-body-with-HTTP-GET&highlight=resttemplate+http+get
http://forum.springsource.org/showthread.php?94201-GET-method-on-RestTemplate-exchange-with-a-Body&highlight=resttemplate+http+get
资源 - 关于通过HTTP GET发送主体的一般性讨论
得到-与请求体
是,这个语句纠正-HTTP-GET-方法,始终有 - 无消息体
得到有或后当读取请求体
HTTP-URI-得到限制
理解RestTemplate提供将数据作为请求主体发送的方式是正确的,但是由于服务器无法处理请求主体而发生错误?
通过查看网络流量(请求是否与请求主体和GET方法一起发送?)和服务器日志(您收到的500结果必须具有记录的服务器端效果,如果不是,请配置服务器这样做)。
如果通过HTTP Get发送的请求体不是常规的,RestTemplate为什么会提供API来允许发送它? 这是否意味着很少有服务器能够通过GET处理请求主体?
因为它是一个通用类,它还允许您创建可包含邮件正文的请求。
正如HTTP请求正文中所述:
换句话说,任何HTTP请求消息都被允许包含一个消息体,因此[服务器]必须解析消息。 但是,GET的服务器语义受到限制,因此主体(如果有)对请求没有语义含义。 解析的要求与方法语义的要求是分开的。
GET上的主体不能在语义上做任何事情,因为你正在请求资源。 这就像你告诉服务器:“给我资源X,哦,有一些苹果!”。 服务器不会关心你的苹果,并且很乐意为X提供资源 - 或者抛出错误,因为它不喜欢请求中的任何提议。
但是,我被要求测试通过HTTP GET发送内容的可能性
请告诉请求者这是一个不应该被测试的情况,因为没有明智的实现支持它。
链接地址: http://www.djcxy.com/p/71453.html