带有Header的Spring RestTemplate postForObject:webservice找不到我的头参数

POL*_*POL 30 java spring resttemplate

我正在与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);
Run Code Online (Sandbox Code Playgroud)

谁能告诉我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); 
Run Code Online (Sandbox Code Playgroud)

因为我在响应上也很难,也许对其他人有用:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ItcLoginResponse {

    public String loginToken;

    @JsonProperty("token")
    public String getLoginToken() {
        return loginToken;
    }

    public void setLoginToken(String loginToken) {
        this.loginToken = loginToken;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ttR 6

您正在设置标题,表明您正在发布表单(APPLICATION_FORM_URLENCODED),但随后将companyId和密码设置为HTTP标头.

我怀疑你希望这些字段在你的请求正文中.

您还要创建一个HttpEntity<String>表示您要发布包含String的请求主体,但是您提供的是标题但没有String.

如果这对您没有帮助,可能您可以解释请求应该是什么样子.