Spring RestTemplate postForObject with Header: webservice 找不到我的 header 参数

2022-09-01 12:17:36

我正在与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;
    }
}

答案 1

您正在设置一个标头,指示您正在发布表单(APPLICATION_FORM_URLENCODED),然后将 companyId 和密码设置为 HTTP 标头。

我怀疑您希望这些字段位于您的请求正文中。

您还创建了一个指示您将发布包含字符串的请求正文,但您提供了标头但没有提供字符串。HttpEntity<String>

如果这不能帮助你修复它,也许你可以解释请求应该是什么样子的。


答案 2

推荐