spring - 带有自定义 header 的 Resttemplate GET 请求

标签 spring rest resttemplate custom-headers

我需要发送一个带有标题的 GET 请求:Content-Type: application/camiant-msr-v2.0+xml .我期望来自服务器的 XML 响应。我用 Postman 测试了请求和响应,一切都很好。但是当我尝试在 Spring 中使用 RestTemplate 进行操作时,我总是收到 400 错误的请求。来自 spring 的异常(exception)情况是:

Jul 09, 2016 12:53:38 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/smp] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 400 Bad Request] with root cause
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475)

我的代码:
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/camiant-msr-v2.0+xml");

HttpEntity<?> entity = new HttpEntity<Object>(headers);
log.debug("request headers: " + entity.getHeaders());
ResponseEntity<String> response = restTemplate.exchange(queryUrl, HttpMethod.GET, entity, String.class);

调试消息将 header 显示为 {Content-Type=[application/camiant-msr-v2.0+xml]} ,这似乎是正确的。我想知道我的请求有什么问题,以及是否有办法查看网络上的请求以进行调试。

最佳答案

以下对我有用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

@Service
public class Http {

    @Autowired
    private RestTemplate restTemplate;

    public String doGet(final String url) throws Exception {
        MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
        headers.add(HttpHeaders.USER_AGENT, "Mozilla/5.0");
        headers.add(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.8");
        HttpEntity<?> entity = new HttpEntity<Object>(headers);
        HttpEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
        return response.getBody();
    }

}

关于spring - 带有自定义 header 的 Resttemplate GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38285972/

相关文章:

java - 如何在 rest api jersey 中获取文件的大小

java - 使用@RestClientTest 对 rest 客户端进行 Spring boot 测试

java - SpringBoot RestTemplate 交换存在 ResponseEntity 的 ParameterizedTypeReference 转换问题

java - Spring Rest Template Http客户端错误异常

spring - 关于如何使用 Spring 构建 Grails 是否有很好的引用?

java - 使用 Spring Web Flow 1 时,如何将对象添加到 bean 中的列表中?

java - Resteasy ExceptionMapper 不返回结果

java - 创建 bean 时出错。 Autowiring 依赖项注入(inject)失败。无法 Autowiring 字段

java - Spring RESTful 应用程序基于 Java 的配置

java - 将 RestAssured 转换为 RestTemplate