LoginSignup
5
6

More than 5 years have passed since last update.

RestTemplateに追加されたpatchForObjectはデフォ実装(HttpURLConnection使うやつ)だと実質使えません

Last updated at Posted at 2016-12-26

Spring Framework 4.3.5より、RestTemplatepatchForObjectメソッド(PATCHメソッドを使ってHTTP通信するためのメソッド)が追加されましたが、RestTemplateをデフォルト状態で使うと通信処理時にエラーになってしまいます :sweat_smile:
これは・・・デフォルト状態で使われるクラスが、JDK標準APIのjava.net.HttpURLConnectionだからです。知っている方もいると思いますが、HttpURLConnectionはPATCHメソッドをサポートしてないのです・・・。

PATCHを使う場合は?

PATCHメソッドをサポートしているOSSライブラリを使ってください!!

Spring Frameworkでは、以下のOSSライブラリをサポートしてます。

  • Apache HttpComponents HttpClient
  • OkHttp 3
  • OkHttp 2
  • Netty 4

上記のライブラリは全てPATCHメソッドをサポートしています。

OSSライブラリを使うには?

以下の手順が必要になります。

  1. pom.xmlなどに依存ライブラリとして追加する
  2. RestTemplateにOSSライブラリに対応するClientHttpRequestFactoryの実装クラスをインジェクションする
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通信しましょう!!

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6