我有一个现有的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 Boot 1.2.8和Feign 8.5.0的Spring Cloud Angel.SR6。
发布于 2016-03-14 23:31:53
我解决了我的问题。事实证明,该错误消息非常具有误导性。我发现该方法是以Null值传递的,所以URI模板没有什么可替换的。因为它是一个接口,所以我不能添加逻辑来断言Not Null需求,至少就我目前所知是这样。
一旦我弄清楚了这一点并在调用的上游解决了它,IllegalArgumentException就被淘汰了。请注意,no where是输入为空的事实,在我的原始笔记的堆栈跟踪中记录了这一点。
https://stackoverflow.com/questions/35926855
复制相似问题