5

Springs Feign Client 機能を使用して、あるマイクロ サービスから別のマイクロ サービスに通信しています。

ここで、呼び出されたサービスは、ファイルと関連する (JSON) オブジェクトを受け入れる REST インターフェイスを公開します。

@RequestMapping(value = {CONVERT_PATH, APPLICATION_PATH + CONVERT_PATH}, method = RequestMethod.POST, produces = CONTENT_TYPE)
    public ResponseEntity<InputStreamResource> convert(@RequestPart("file") MultipartFile file, @RequestParam("input") Input in) {...}

このインターフェイスは正常に機能しています。別のソースから有効なマルチパート/混合エンティティを送信して、これを確認しました。

次に、他のサービスで、このインターフェイスを使用するように、一致する偽クライアントをセットアップしました。

@FeignClient("convert")
public interface ConvertClient {
    @RequestMapping(value = CONVERT_PATH, method = RequestMethod.POST, consumes = "multipart/mixed")
    ResponseEntity<InputStreamResource> convert(@RequestPart("file") MultipartFile file, @RequestPart("input") Input in);
}

繰り返しますが、あるサービスから別のサービスへの接続は機能しています。偽のクライアント (複数の部分を使用しないもの) の別の要求インターフェイスでこれを確認しました。

この特定のインターフェイス メソッドを使用して (クライアント) サービスを構築しようとすると、次の例外が発生します。

FactoryBean threw exception on object creation; 
nested exception is java.lang.IllegalStateException: Method has too many Body parameters: 
public abstract org.springframework.http.ResponseEntity <..>.feign.ConvertClient.convert(org.springframework.web.multipart.MultipartFile,<..>.Input)

これを機能させるためにできることはありますか?私が述べたようにRESTインターフェースに到達することは可能であり、さまざまな偽の呼び出しが機能しています。私が間違っていなければ、これはうまくいくはずです。Springs Feign は、feign インターフェイスの multipart/mixed をサポートしていないだけですか?

4

1 に答える 1

1

マルチパート リクエスト (1 つまたは複数のファイルと json パーツ) をエンコードできるカスタム Feign Encoder を公開しました。ここで試すことができます。実装できる他のユースケースがあれば教えてください。お気軽にイシューを開いてください。

于 2016-02-24T15:14:57.480 に答える