search
LoginSignup
6

More than 5 years have passed since last update.

posted at

updated at

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

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通信しましょう!!

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
What you can do with signing up
6