当前位置: 首页 > 面试题库 >

带标题的Spring RestTemplate postForObject:Web服务找不到我的标题参数

孔欣荣
2023-03-14
问题内容

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

问题答案:

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

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

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

如果那不能帮助您解决问题,则可以解释该请求的外观。



 类似资料:
  • 我正在使用iText7和java,我的问题是,当我试图打开一个现有的pdf文件时,这个例外。这是我的密码 为什么不起作用?

  • 问题内容: 我正在使用opencsv将Java bean写入带有标头的CSV文件中。文件名包含当前日期。如果用户在同一天第二次运行它,它将追加到文件中,但添加另一个标题行。 如何附加到文件但没有列标题。 问题答案: 好一个 在opencsv中进行编写时,我们并不怎么想追加内容,因为它可能存在风险(出问题了,您可能会破坏本来很好的文件),因此倾向于使用写入。 那就是说在sourceforge中打开一

  • 问题内容: 我在jsp页面中有一个img标签,其中src路径要求传递标头参数来获取图像。我们如何实现呢? 问题答案: 首先,您需要发出一个设置头文件的ajax请求。然后,您需要使用一些HTML5 API将接收到的二进制数据转换为base64。最后,使用协议和base64数据设置映像src 。 资料来源: https://developer.mozilla.org/zh- CN/docs/Web/A

  • 问题内容: 我正在编写一个csv文件,我需要在输出文件中添加列标题。 这是我的代码。 上面的代码用数据创建一个csv文件。但该文件中不包括列标题。 如何添加列标题以输出csv? 问题答案: ColumnPositionMappingStrategy#generateHeader返回空数组 如果从BeanToCsv构建器中删除MappingStrategy 它将产品的类成员写为CSV标头 如果您的产

  • 问题内容: 我如何使用pandas读取.csv文件(无标题),并且只希望使用列的子集(比如说20列中的第4和第7列)?我似乎无法做 问题答案: 为了读取其中没有标题的csv,仅对于某些列,您需要传递params以及第4列和第7列: 查看文档

  • 我有一个有多个列的数据框。我想遍历这些列,计算每列有多少空值,并生成一个新的数据框,在列标题名称旁边显示值的总和。 如果我这样做: 我得到每个列的空计数列表: 我想做的是创建一个新的数据帧,它的列标题和空计数并列,例如。