有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有标题的java Spring RestTemplate postForObject:webservice找不到我的标题参数

我正在和rest模板做斗争。我需要向rest 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) 个答案

  1. # 1 楼答案

    您正在设置一个标题,表明您正在发布一个表单(APPLICATION_form_URLENCODED),但随后将companyId和password设置为HTTP标题

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

    您还将创建一个HttpEntity<String>,它指示您将发布一个包含字符串的请求正文,但您提供的是头,而不是字符串

    如果这不能帮你解决问题,也许你可以解释一下请求应该是什么样子