春天RestTemplate - HTTP GET请求与身[复制](Spring RestTem

2019-07-03 15:33发布

可能重复:
HTTP GET请求与身体

我在这里读几讨论不提倡通过HTTP GET发送内容。 有数据的大小,可以通过客户端(网页浏览器)发送的限制。 和处理GET数据也依赖于服务器。 请参考下面的部分资源

不过,我一直在问,以测试使用RestTemplate通过HTTP GET发送内容的可能性。 我refered春论坛的讨论很少,但他们并没有回答。 (请注意:通过HTTP POST工作正常发送数据)。 讨论在这里建议使用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;
}

问题 -执行此测试情况下返回500内部服务器错误。 在调试时,我发现控制器未击中。

  1. 它是正确理解RestTemplate提供了发送数据请求体的方式,但出现错误的原因是服务器无法处理请求的身体吗?

  2. 如果通过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-得到限制

Answer 1:

它是正确理解RestTemplate提供了发送数据请求体的方式,但出现错误的原因是服务器无法处理请求的身体吗?

您可以通过查看网络流量(不要求得到一个请求主体和GET方法?发送),并在服务器日志告诉(500结果收到必须有一个被记录在服务器端的效果,如果没有,配置服务器这样做)。

如果通过HTTP GET发送的请求主体不是常规为什么RestTemplate提供的API允许发送呢? 这是否意味着有能够通过GET处理请求体几台服务器?

因为它是一个通用类,也可以让你手艺请求可以包括消息体。

正如指出的HTTP GET请求与身体 :

换句话说,任何HTTP请求消息允许包含消息体,因此[服务器]必须考虑到这一点解析消息。 对于GET服务器语义,但被限制这样一个机构,如果有的话,没有任何语义的请求。 上解析的要求是从方法语义要求分开。

在获得的身体不能做任何语义,因为你请求的资源。 这就像你告诉服务器:“给我资源X,哦,并且有一些苹果” 。 服务器并不会在意你的苹果,高兴地服务资源X - 或抛出一个错误,因为它不喜欢在请求任何优惠。

不过,我一直在问到测试的可能性通过HTTP GET发送内容

请告诉谁要求这一点,这是不应该进行测试,因为没有合理的执行支持它的情况下的一个。



文章来源: Spring RestTemplate - http GET with request body [duplicate]
标签: http get