在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);
有谁知道这种情况?或者是我试图做的事情是不可能的?
答案 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)
尝试启用Spring包的完整调试。我相信你会得到更多 有关您的错误请求的信息&#34;:
<logger name="org.springframework">
<level value="DEBUG"/>
</logger>
尝试使用任何其他工具(例如Rest Console)发送相同的请求 Chrome插件)。
查看浏览器调试控制台上发生了什么(&#34;网络&#34; Chrome选项卡,例如)。
这些步骤总能帮助我。
答案 2 :(得分:0)