我有一个现有的 Spring Cloud Feign 客户端接口,它有许多用于我的服务器端 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 一起使用。