使用自定义标头和请求对象将Spring RestTemplate发送到POST请求

时间:2014-02-12 09:06:06

标签: java spring rest spring-mvc resttemplate

在Spring中,RestTemplate有一种方法可以将自定义标题与POST请求对象一起发送。我已经尝试了可用的exchange方法。我们似乎可以将键值对与自定义​​标头一起发送,但不是附加到HttpEntity.的请求对象本身。以下代码说明了尝试,它似乎是服务器的400 BadRequest

    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<?> httpEntity = new HttpEntity<Object>(requestDTO, requestHeaders);

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.exchange(URL, HttpMethod.POST, httpEntity, SomeObject.class);

有谁知道这种情况?或者是我试图做的事情是不可能的?

3 个答案:

答案 0 :(得分:66)

是的,如果使用MultiValueMap标头而不是HttpHeaders

,则有可能

示例:

MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Authorization", "Basic " + base64Creds);
headers.add("Content-Type", "application/json");

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

HttpEntity<ObjectToPass> request = new HttpEntity<ObjectToPass>(objectToPassInstance, headers);

restTemplate.postForObject(urlPost, request, Boolean.class);

Boolean.class只是因为我的控制器在这个端点返回布尔值(可能是任何东西)

编码祝你好运!

答案 1 :(得分:0)

  1. 尝试启用Spring包的完整调试。我相信你会得到更多 有关您的错误请求的信息&#34;:

    <logger name="org.springframework">
        <level value="DEBUG"/>
    </logger>
    
  2. 尝试使用任何其他工具(例如Rest Console)发送相同的请求 Chrome插件)。

  3. 查看浏览器调试控制台上发生了什么(&#34;网络&#34; Chrome选项卡,例如)。

  4. 这些步骤总能帮助我。

答案 2 :(得分:0)

如果您正在使用HttpClient 3.x,请按照this开启日志记录。如果您正在使用HttpClient 4.x,请按照this开启日志记录。这应该告诉你通过网络发送了什么,并且是调试的一个不错的起点。