我正在与RestTemplate斗争 . 我需要将一些身份验证信息发送到其他Web服务 . 我可以发送请求,我会收到回复 . 但根据响应我的 Headers 参数没有通过 . (使用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有什么问题?
谢谢 .
SOLVED:
好的,终于搞定了 .
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;
}
}
1 回答
您正在设置 Headers ,表明您正在发布表单(APPLICATION_FORM_URLENCODED),但随后将companyId和密码设置为HTTP标头 .
我怀疑你希望这些字段在你的请求正文中 .
您还要创建一个
HttpEntity<String>
,表示您提供 Headers 但没有字符串 .如果这对您没有帮助,可能您可以解释请求应该是什么样子 .