Feign クライアントに Spring Boot コントローラーを使用してもらい、それらの間のコントラクトを可能な限り共通のインターフェイスで指定するようにします。
メソッドとのインターフェースは次のようになります。
@RequestMapping
public interface RuleManager {
@RequestMapping(value = "/addRule", method = RequestMethod.POST, consumes = {"application/json"}, produces = {"application/json"})
@ResponseBody Rule addRule(@RequestBody Rule rule);
}
Feign クライアントは次のようになります。
@FeignClient(url = "http://localhost:8080")
public interface RuleManagerClient extends RuleManager { }
および Spring ブート コントローラー:
@RestController
public class RuleManagerService implements RuleManager {
@Override
@Transactional
public Rule addRule(@RequestBody Rule rule) {
return rule;
}
}
@RequestMapping を 2 か所指定する必要がないのは良いことですが、残念ながら @RequestBody を 2 回指定する必要があるようです。@RequestBody がコントローラーまたは共有インターフェースから省略されている場合、Rule オブジェクトはインスタンス化されますが、すべてのメンバーが null に設定されます。
これを回避する方法はありますか?おそらく、これは新しいバージョンで対処されていますか? 私の依存関係は次のとおりです。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<exclusions>
<exclusion>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-core</artifactId>
<version>8.14.3</version>
</dependency>
この手法には少なくとも偽コア 8.6 が必要であることがわかりました。
https://jmnarloch.wordpress.com/2015/08/19/spring-cloud-designing-feign-client/
助けてくれてありがとう。