如何从 Spring Boot 的标头中使用 x-api-key 调用外部 API

Bho*_*esh 0 api-key http-headers spring-boot

我试图从我的 Spring Boot 应用程序的标头中调用带有x-api-key的外部 api ,并最终出现以下异常。

2022-01-22 22:44:19.973 ERROR 8828 --- [nio-8080-exec-2] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 在上下文中path[]抛出异常[请求处理失败;嵌套异常是 org.springframework.web.client.HttpClientErrorException$Forbidden: 403 Forbidden: "{"message":"Forbidden"}"] 其根本原因

org.springframework.web.client.HttpClientErrorException$Forbidden: 403 禁止: "{"message":"Forbidden"}" 在 org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:109) ~[spring-web -5.3.15.jar:5.3.15] 在 org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:168) ~[spring-web-5.3.15.jar:5.3.15] 在 org.springframework .web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) ~[spring-web-5.3.15.jar:5.3.15] 在 org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) 〜[spring-web-5.3.15.jar:5.3.15] 在 org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:819) 〜[spring-

我的控制器如下所示:

 @RestController
    @RequestMapping("/callExternalApi")
    public class ExternalApiCallerController {
        
        @PostMapping
        @ResponseBody
        public ResponseEntity<String> callExternalApi(@RequestBody String url) {
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("x-api-key", "Hnmn1nhsg7wbkItsAdv");
            HttpEntity<Object> entity=new HttpEntity<Object>(headers);
    
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
            
            return response;
        }
    
    }
Run Code Online (Sandbox Code Playgroud)

看起来 x-api-key 没有在标头中正确发送到外部 api。任何人都可以帮助如何在标头中使用 x-api-key 调用外部 api 吗?

Bho*_*esh 5

这段代码对我有用。需要使用 HttpHeaders 对象来添加 x-api-key 及其值。

@RestController
@RequestMapping("/callExternalApi")
public class ExternalApiCallerController {

    @PostMapping
    @ResponseBody
    public ResponseEntity<String> callExternalApi(@RequestBody String url) {
        HttpHeaders headers = new HttpHeaders();
        headers.add("x-api-key", "Hnmn1nhsg7wbkItsAdv");
        HttpEntity<Object> entity=new HttpEntity<Object>(headers);

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);

        return response;
    }

}
Run Code Online (Sandbox Code Playgroud)