Spring Framework 4.3.5より、RestTemplate
にpatchForObject
メソッド(PATCHメソッドを使ってHTTP通信するためのメソッド)が追加されましたが、RestTemplate
をデフォルト状態で使うと通信処理時にエラーになってしまいます
これは・・・デフォルト状態で使われるクラスが、JDK標準APIのjava.net.HttpURLConnection
だからです。知っている方もいると思いますが、HttpURLConnection
はPATCHメソッドをサポートしてないのです・・・。
PATCHを使う場合は?
PATCHメソッドをサポートしているOSSライブラリを使ってください!!
Spring Frameworkでは、以下のOSSライブラリをサポートしてます。
- Apache HttpComponents HttpClient
- OkHttp 3
- OkHttp 2
- Netty 4
上記のライブラリは全てPATCHメソッドをサポートしています。
OSSライブラリを使うには?
以下の手順が必要になります。
- pom.xmlなどに依存ライブラリとして追加する
-
RestTemplate
にOSSライブラリに対応するClientHttpRequestFactory
の実装クラスをインジェクションする
@Bean
RestTemplate restTemplate() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
return new RestTemplate(factory);
}
Note:
Spring Boot 1.4+上でRestTemplateを使う場合は、「Spring Boot 1.4+でRestTemplate(HTTPクライアント)を使う」をご覧ください!! Spring 1.4で追加された
RestTemplateBuilder
を使ってRestTemplate
を生成することで、上記手順の2を自動で解決してくれます。
Spring Frameworkが提供しているClientHttpRequestFactoryの実装クラス
Spring Frameworkは、以下の実装クラスを提供してます。
クラス名 | 説明 |
---|---|
HttpComponentsClientHttpRequestFactory |
Apache HttpComponents HttpClientを使ってHTTP通信を行うための実装クラス |
OkHttp3ClientHttpRequestFactory |
OkHttp 3を使ってHTTP通信を行うための実装クラス |
OkHttpClientHttpRequestFactory |
OkHttp 2を使ってHTTP通信を行うための実装クラス |
Netty4ClientHttpRequestFactory |
Netty 4を使ってHTTP通信を行うための実装クラス |
SimpleClientHttpRequestFactory |
JDKのをHttpURLConnection を使ってHTTP通信を行うための実装クラス(デフォルト実装) |
まとめ
PATCHメソッドを使ってREST API(Web API)にアクセスする必要がある場合は・・・OSSライブラリを使ってHTTP通信しましょう!!