我在为RestTemplate苦苦挣扎。我需要将一些身份验证信息发布到其他Web服务。我可以发送请求并得到回复。但是根据响应,我的头参数未通过。(使用SOAPUI发送相同的请求可以正常工作)
这是我的代码:
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.add("companyId", companyId); headers.add("password", password); HttpEntity<String> request = new HttpEntity<String>(headers); RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); messageConverters.add(new MappingJacksonHttpMessageConverter()); restTemplate.setMessageConverters(messageConverters); LoginResponse response = (LoginResponse)restTemplate.postForObject(url, request, LoginResponse.class);
谁能告诉我HttpEntity或HttpHeader怎么了?
谢谢。
解决了:
好的,终于可以了。
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); map.add("companyId", companyId); map.add("password", password); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers); List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); messageConverters.add(new MappingJacksonHttpMessageConverter()); messageConverters.add(new FormHttpMessageConverter()); restTemplate.setMessageConverters(messageConverters); LoginResponse response = (LoginResponse) restTemplate.postForObject(url, request, LoginResponse.class);
因为我也很难回答,所以对其他人可能有用:
@JsonIgnoreProperties(ignoreUnknown = true) public class ItcLoginResponse { public String loginToken; @JsonProperty("token") public String getLoginToken() { return loginToken; } public void setLoginToken(String loginToken) { this.loginToken = loginToken; } }
您正在设置标头,指示要发布表单(APPLICATION_FORM_URLENCODED),然后将companyId和password设置为HTTP标头。
我怀疑您希望这些字段出现在请求的正文中。
您还创建了一个HttpEntity<String>,指示要发布一个包含字符串的请求正文,但要提供标头,但不提供字符串。
HttpEntity<String>
如果那不能帮助您解决问题,则可以解释该请求的外观。