【问题标题】:How to forward HttpServletRequest headers to another REST API in Spring Boot如何在 Spring Boot 中将 HttpServletRequest 标头转发到另一个 REST API
【发布时间】:2020-05-13 14:39:18
【问题描述】:

我有一个 REST API,它接受请求中的请求标头。我的控制器在内部调用另一个 API。我想要做的是将我在请求中收到的所有标头传递给控制器​​正在调用的内部 API。

我知道我可以遍历标头并将它们设置在我正在创建的 HttpRequest 中,但还有其他方法可以一步设置。

谢谢,

【问题讨论】:

    标签: java spring-boot rest header


    【解决方案1】:

    您可以如下设置标题:-

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("custom-header-name, "value");
    
    HttpEntity<Request> entity = new HttpEntity<Request>(request, headers);
    
    RestTemplate template = new RestTemplate();
    
    ResponseEntity<Response> respEntity = template
        .exchange("URL", HttpMethod.POST, entity , RestResponse.class);
    

    【讨论】:

    • 这不是我问的。我正在获取我的 API 输入中的标头,我需要将其传递给另一个 api。在这里,您正在代码本身中创建标头。
    • 那你为什么不设置像 HttpEntity entity = new HttpEntity(request, headers);
    • 我正在使用 HttpClient。我知道这很奇怪,但是在使用 RestTemplate 时,api 不会考虑我传递的 access_token 并返回 401。HttpClient 工作正常。
    • 401 并不意味着 api 不接受访问令牌或任何其他标头,而是意味着由于未验证访问令牌而导致出现问题。
    • 它只给出了resttemplate的问题。当我切换到 httpclient 时,它开始正常工作。
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2020-07-17
    • 2020-11-02
    • 2019-12-07
    相关资源
    最近更新 更多