サーバー側 API の多くのマッピングを持つ既存の Spring Cloud Feign クライアント インターフェイスがあります。いくつかの新しいメソッドを追加していますが、突然エラーが発生しました。次の形式のメソッドを追加しようとしています:
@RequestMapping(value = "/tasks/{id}", method = GET)
public Resource<Task> getTask(@PathVariable("id")Long id);
すべて正常にコンパイルされますが、上記の getTask() メソッドを呼び出そうとすると、URL が無効であるという不平を言う IllegalArgumentException が常に発生します。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 で使用しています。