【问题标题】:Spring Cloud Feign not processing @RequestMapping UriTemplateSpring Cloud Feign 不处理 @RequestMapping UriTemplate
【发布时间】:2016-06-25 21:49:28
【问题描述】:

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

【问题讨论】:

  • 这很奇怪。有重现问题的项目吗?
  • 我同意这很奇怪。我隐约记得在过去看到过这种情况,并且我认为这是其他东西的副作用。中 URL 的主机名/端口方面是错误的这一事实也有些相关。不幸的是,那是很久以前的事了,那时代码还不是很稳定,我不记得它是如何解决的。我没有可以在任何地方发布的代码,而且我还没有机会尝试使用示例代码进行重现。我希望其他人能够为我指明正确的方向。
  • 我刚刚尝试过这种方法,它适用于我使用 1.1.0M5。你能分享你的整个客户端类吗?
  • 更奇怪的是,我为另一组端点的接口添加了额外的方法,所有这些都使用类似的模板,并且都可以正常工作。即使在那之后,呼叫仍然失败。似乎有关此特定端点的某些东西正在引起某种问题。看来我将不得不逐步完成处理以找出失败的原因。

标签: spring-cloud spring-cloud-feign feign


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-17
    • 2011-12-12
    • 2015-08-24
    • 2017-07-23
    • 2018-06-14
    • 2015-10-21
    • 2018-08-31
    • 2015-09-12
    相关资源
    最近更新 更多