最近異動してSpring Bootをさわるようになったので、これからそのあたりの知見も勉強の記録として書こうと思う。Spring Boot超初心者かつ最新のJavaからもしばらく離れていた人間が書いている内容なので注意。
Spring Bootアプリケーションから別のサーバにhttpリクエストを投げる時はRestTemplate
を使えばよいらしい。通常はRestTemplate
インスタンスを作るのには、RestTemplateBuilder
を使えば良さそう。
また、アプリケーション全体でhttpリクエストに共通のカスタマイズを入れたい場合は、RestTemplateCustomizer
インタフェースを継承したBeamを作れば良いらしい。
https://spring.pleiades.io/spring-boot/docs/2.4.4/reference/html/spring-boot-features.html#boot-features-resttemplate-customization
アプリケーション全体で追加のカスタマイズを行うには、
15.1. RestTemplateのカスタマイズRestTemplateCustomizer
Bean を使用します。このような Bean はすべて、自動構成されたRestTemplateBuilder
に自動的に登録され、それを使用して作成されたすべてのテンプレートに適用されます。
RestTemplateCustomizerを継承したBeanを書いておけば、自動的にRestTemplateBuilderにinjectされるようだ。
ところで、仕事で複数のRestTemplateCustomizerの実装があり、ひとつが動いていないという不具合に遭遇していた。複数あることが原因ではないかという仮説があったのだが、実装を調べたところ、
spring-boot/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/RestTemplateBuilder.java at d1eb9d53ab4f13cf97ecc1684cc98894668d66c8 · spring-projects/spring-boot
Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.
private final Set<RestTemplateCustomizer> customizers;
と複数保持できるようになっている。コンストラクタは
public RestTemplateBuilder(RestTemplateCustomizer... customizers) {
...
this.customizers = copiedSetOf(customizers);
こんな感じなので、おそらく複数のBeanがあっても、一つだけということではなく、それらがインジェクトされるのではないだろうか。
コメント