spring-cloud - Spring Cloud Feign 不处理@RequestMapping UriTemplate

标签 spring-cloud spring-cloud-feign feign

我有一个现有的 Spring Cloud Feign 客户端接口(interface),它为我的服务器端 API 提供了许多映射。我正在添加一些新方法,但突然遇到错误。我正在尝试添加以下形式的方法:

@RequestMapping(value = "/tasks/{id}", method = GET)
public Resource<Task> getTask(@PathVariable("id")Long id);

一切都编译得很好,但是当我尝试调用上面的 getTask() 方法时,我总是得到一个 IllegalArgumentException 提示 URL 无效。这是真的,因为 URL 仍然包含 UriTemplate {id}

完整的堆栈是:

java.lang.IllegalArgumentException: Illegal character in path at index 29: http://connect/connect/tasks/{id}
    at java.net.URI$Parser.fail(URI.java:2848)
    at java.net.URI$Parser.checkChars(URI.java:3021)
    at java.net.URI$Parser.parseHierarchical(URI.java:3105)
    at java.net.URI$Parser.parse(URI.java:3053)
    at java.net.URI.<init>(URI.java:588)
    at java.net.URI.create(URI.java:850)
    at feign.ribbon.RibbonClient.execute(RibbonClient.java:64)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:92)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:71)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:94)
    at com.sun.proxy.$Proxy55.getTask(Unknown Source)

同一界面中还有许多其他方法使用了完全相同的模式,并且一切运行良好。我终其一生都无法弄清楚为什么 Feign/Spring 突然对这种方法产生了疑问。我已经尝试了所有可能的设置组合和编写方法的方法。如果我简单地删除 {id},调用将通过,但显然会返回错误的数据,因为它缺少 URI 的 id 部分。

我将 Spring Cloud Angel.SR6 与 Spring Boot 1.2.8 和 Feign 8.5.0 一起使用。

最佳答案

我解决了我的问题。事实证明,该错误消息具有误导性。我发现该方法是在 Null 值中传递的,因此 URI 模板没有任何内容可以替换。由于它是一个接口(interface),我无法添加逻辑来断言 Not Null 要求,至少就我目前所知是这样。

一旦我弄清楚并在调用的上游解决它,IllegalArgumentException 就被消除了。请注意,在我原始笔记的堆栈跟踪中,没有注意到输入为 NULL 的事实。

关于spring-cloud - Spring Cloud Feign 不处理@RequestMapping UriTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35926855/

相关文章:

java - 无法使用 feign 发出请求, "feign.FeignException$Forbidden: [403 Forbidden]"

java - 如何向 Feign RequestInterceptor 传递参数?

spring-cloud - 使用路径中的部分构建 URL

spring - 在 Spring Cloud 配置客户端之间共享配置

java - Feign 单元测试未找到响应

spring - 如何在 Java Spring 应用程序中缓存使用 Netflix Feign 库发出的 HTTP 请求

java - Feign 无法连接到本地主机

spring - 使用 Swagger 生成 Netflix Feign 代码

Spring Boot 与 spring-cloud : gradle build fails

java - Spring Cloud Gateway 用于复合 API 调用?