概要
RestTemplate#exchangeメソッドの基本的なDELETE通信の使用方法についてまとめた。
動作確認を行うための事前準備については、以下に記載している。
概要 RESTfulなAPIを呼ぶクライアントライブラリである、RestTemplateの概要についてまとめた。 RestTemplateを使用するための準備と、どんなメソッドがあるのかを紹介している。 前提 今[…]
基本的な使い方
exchangeメソッドは、HTTP メソッド(GET, POST, PUT, DELETE など)を柔軟に扱うことができる。
戻り値は、HTTPステータス/ヘッダー/ボディを含むResponseEntityオブジェクトとなる。
今回は基本的なDELETE通信を行う方法について紹介する。
実装方法
RestTemplate#exchangeメソッドを使用してDELETE通信を行うには、基本的に以下のように実装する。
exchange(reqEntity, 取得したいレスポンスの型);
「RequestEntity.delete」と指定することで、リクエストボディを設定してPUT通信が可能となる。
戻り値は指定したレスポンスの型をボディにもつResponseEntityとなる。
尚、RequestEntityにはリクエストヘッダー/ボディ/HTTPメソッド(今回はDELETE)を指定できる。
使用例
GET通信の記事にて追加したexchangeメソッドを使用して動作確認を行う。
APIアクセスクラス
以下のexchangeメソッドを使用する。
RestClient.java
package com.example.client_prototype.biz;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class RestClient {
@Autowired
private RestTemplate restTemplate;
/**
* exchangeの利用
* @param <T>
* @param requestEntity
* @param responseType
* @return
*/
public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, Class<T> responseType) {
return restTemplate.exchange(requestEntity, responseType);
}
/**
* exchangeの利用
* @param <T>
* @param requestEntity
* @param responseType
* @return
*/
public <T> ResponseEntity<List<T>> exchange(RequestEntity<?> requestEntity, ParameterizedTypeReference<List<T>> responseType) {
return restTemplate.exchange(requestEntity, responseType);
}
}
動作確認
動作確認を行う。
動作確認用クラス
// URI定義
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080/rest_prototype/rest04/{id}")
.buildAndExpand(2)
.toUri();
// DELETEリクエスト(id=2を削除)
RequestEntity<Void> reqEntity = RequestEntity
.delete(uri)
.build();
ResponseEntity<Void> resEntity = restClient.exchange(reqEntity, Void.class);
// 動作確認
System.out.println(resEntity.getStatusCode());
System.out.println(resEntity.getHeaders());
System.out.println(resEntity.getBody());
// 削除確認
RequestEntity<Void> req = RequestEntity.get(URI.create("http://localhost:8080/rest_prototype/rest05/")).build();
List<Resource> res = restClient.exchange(req, new ParameterizedTypeReference<List<Resource>>() {}).getBody();
res.forEach(r -> System.out.println(r));
.delete(uri)
指定したURIにDELETEリクエストを行うRequestEntityクラスを作成している。
RequestEntityクラスをボディなしで作成するという意味。
レスポンスのボディは基本的にないためVoid.classを指定する。
コンソール
204 NO_CONTENT
[Date:"Thu, 27 Mar 2025 23:49:26 GMT", Keep-Alive:"timeout=20", Connection:"keep-alive"]
null
Resource(id=1, name=りんご, hogeDate=2025-02-01)
Resource(id=3, name=らっぱ, hogeDate=2023-05-10)
まとめ
☑ exchangeはあらゆるHTTPメソッドを扱え、ヘッダーやボディを自由に指定できる
☑ RequestEntityクラスのdeleteメソッドを利用してDELETE通信を行う
☑ 戻り値は基本的にないため、Void.classをResponseEntityに設定する