【发布时间】:2021-12-28 11:32:36
【问题描述】:
我从使用 Spring boot 和 feign 构建的 Java 应用程序连接到外部 API 时遇到问题。 应用程序部署到 docker 容器中的 VM。 到目前为止,我正在尝试访问外部服务端点以检索一些数据。
我已经从 VM 命令行和从 docker 容器内部也从命令行使用 curl 执行了相同的命令,但是当我尝试从 java 代码中点击它时,我只是收到超时。
关于可能发生的事情的任何想法,显然主机文件和代理是正确的,因为我可以通过 curl 访问端点,所以我想我在代码本身或 java 设置中遗漏了一些东西。
@GetMapping(value = "${url}", headers = {
"X-API-Key=${apiKey}",
"Authorization=${authorization}",
"Accept=application/json",
"Content-Type=application/json; charset=utf-8"
})
CheckResponse checkEmail(@RequestParam("email") String email) throws FeignClientException;
来自 docker 和 VM 的 curl 请求。
curl --location --request GET 'https://${url}/emailcheck-e?email=test@email.com' --header 'X-API-Key: ${apiKey}' --header 'Content-Type: application/json; charset=utf-8' --header 'Accept: application/json' --header 'Authorization: ${Authorization}'
【问题讨论】:
-
不确定这是否是根本原因,但在
curl-命令中您使用--header 'Authorization: ${Authorization}',而在@GetMapping中您使用"Authorization=${authorization}"。 -
另外,我看不到路径的
emailcheck-e-部分在@GetMapping中定义的位置。 -
“=”是为 feign 映射标题的方式。 emailcheck 部分在 java 代码中被编码为 URl 的一部分。当我进行更改以隐藏真实 URL 时,我犯了一个错误并使用具有不同范围的相同 ${url},在真实代码中,“https://${url}/emailcheck-e”与java代码中的“value = ${url}”。
-
带有标题的点旨在区分大小写(
${Authorization}vs.${authorization}) -
抱歉,我没有这样理解。无论如何,我在修改调用隐藏数据时添加了这种大小写差异。它们都填充了相同的授权信息。
标签: java spring-boot docker feign