春云假装不处理@RequestMapping UriTemplate



我有一个现有的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。

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

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

相关内容

  • 没有找到相关文章

最新更新