带有Header的Spring RestTemplate postForObject:webservice找不到我的头参数 [英] Spring RestTemplate postForObject with Header: webservice can't find my header parameters

查看:236
本文介绍了带有Header的Spring RestTemplate postForObject:webservice找不到我的头参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在与RestTemplate斗争。我需要将一些身份验证信息发送到其他Web服务。我可以发送请求,我会收到回复。但根据响应我的标题参数没有通过。 (使用SOAPUI发送相同的请求工作正常)

I'm struggling with RestTemplate. I need to POST some authentication information to a rest webservice. I can send a request and I get a response. But according to the response my header parameters are not getting through. (Sending the same request with SOAPUI works fine)

这是我的代码:

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有什么问题的人?

Anyone who can tell me what's wrong with my HttpEntity or 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); 

因为我在回复上也遇到了困难,也许对其他人有用:

Because I also had a hard time on the response, maybe it can be useful to others:

@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和密码设置为HTTP标头。

You're setting a header indicating you're posting a form (APPLICATION_FORM_URLENCODED), but then setting companyId and password as HTTP headers.

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

I suspect you want those fields to be in the body of your request.

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

You're also creating an HttpEntity<String> which indicates you're going to post a request body containing a String, but you're providing headers but no String.

如果这对你没有帮助你修复它也许你可以解释一下请求是什么应该看起来像。

If that doesn't help you fix it perhaps you can explain what the request is supposed to look like.

这篇关于带有Header的Spring RestTemplate postForObject:webservice找不到我的头参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆