RestTemplateの内部で使われているHttpClientをJava標準のHttpClientからApacheのHttpClientに変更する。Java標準のHttpClientはPATCH が使用できない。あと経験則で大量APIアクセス時に動作が安定しなかったので基本的にApacheのHttpClientを使用するのが安心かと思っている(使用方法が悪かったり、現在は安定しているかもしれない)。
デフォルトのライブラリが何かprintlnでクラスを出力して確認
val uri = "$taskApiUrl/tasks/$taskId"
println(restTemplate?.requestFactory?.javaClass?.kotlin)
return restTemplate?.getForObject(uri, Task::class)
結果は以下の通り、SimpleClientHttpRequestFactoryがデフォルトとなっている。このクラスのKDocを見てみるとJava標準ライブラリのjava.net.HttpURLConnectionが使われていることが分かる。
class org.springframework.http.client.SimpleClientHttpRequestFactory
Apache HttpClientに変更
application.ymlにapacheのHttpClientのdependencyを追加
implementation(group = "org.apache.httpcomponents", name = "httpclient")
結果を確認
再度クラスを出力してみて、以下の通りHttpComponentsClientHttpRequestFactoryに変わっている事を確認。こちらもKDocを見てみるとApache HttpComponentsが使用されている事が分かる。
2020-12-24 08:39:55.056 INFO 5611 --- [nio-8080-exec-2] c.e.b.controller.TasksController : getTask is called with taskId(12345).
http client : class org.springframework.http.client.HttpComponentsClientHttpRequestFactory
参考
Spring公式 15.1. RestTemplate Customization (ここだけだとちょっとよく分からない)
コード
コメントを残す