Mar*_*tti 3 spring-cloud spring-cloud-feign feign
我有一个现有的Spring Cloud Feign客户端界面,它为我的服务器端API提供了许多映射.我正在添加一些新方法,我突然遇到错误.我正在尝试添加表单的方法:
@RequestMapping(value = "/tasks/{id}", method = GET)
public Resource<Task> getTask(@PathVariable("id")Long id);
Run Code Online (Sandbox Code Playgroud)
一切都编译得很好,但是当我尝试调用上面的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)
Run Code Online (Sandbox Code Playgroud)
在同一个界面中有许多其他方法使用这种完全相同的模式,一切运行正常.我不能为我的生活找出为什么Feign/Spring突然出现这种方法的问题.我已经尝试了所有可能的设置组合和编写方法的方法.如果我只是删除了{id},那么调用将会通过,但显然会返回错误的数据,因为它缺少URI的id部分.
我正在使用Spring Cloud Angel.SR6和Spring Boot 1.2.8以及Feign 8.5.0.
我解决了我的问题.事实证明错误信息是非常误导的.我发现该方法是以Null值传递的,因此没有任何URI模板可以替换.由于它是一个接口,我不能添加逻辑来断言Not Null要求,至少据我所知.
一旦我弄清楚并在调用的上游解决了它,就消除了IllegalArgumentException.请注意,在原始注释的堆栈跟踪中,输入为NULL的情况不存在.
| 归档时间: |
|
| 查看次数: |
1282 次 |
| 最近记录: |