はじめに
こんにちは!今回は、Spring Frameworkの中でもデータ削除の処理に頻繁に使われる@DeleteMapping
アノテーションについて解説します。
このアノテーションを使えば、Webアプリケーションにおいて簡単に削除処理を実装することが可能です。実際のコード例も交えつつ、使い方を一緒に学んでいきましょう!
@DeleteMappingって何?
@DeleteMapping
は、HTTPのDELETEリクエストを処理するためのアノテーションです。主に、データベースやサーバー上のデータを削除するために使用されます。たとえば、特定のユーザーアカウントを削除する場合や、商品の在庫情報を削除する場合にこのアノテーションを使います。
DELETEリクエストは通常、ブラウザのURLバーからは直接送信できませんが、APIクライアントツール(Postmanなど)やJavaScriptのfetch
APIを使って送信できます。
@DeleteMappingの使い方【基本編】
まずは、基本的な使い方から始めましょう。ここでは、ユーザー情報を削除する例を取り上げます。
↓受け取る側(サーバーサイド)
@DeleteMapping("/users")
public String deleteUser(@RequestBody User user) {
// 仮のデータベースからユーザー情報を削除する処理
userDatabase.delete(user.getId());
return "User deleted successfully!";
}
このコードでは、/users
というURLに対してDELETE
リクエストを受け取り、そのユーザーIDに対応するユーザー情報を削除しています。
@RequestBody
を使うことで、リクエストの中に含まれるユーザー情報をUser
オブジェクトとして受け取ることができます。
↓投げる側(フロントエンド)
const userToDelete = {
id: 1, // 削除したいユーザーのID
};
fetch('http://localhost:8080/users', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(userToDelete),
})
この例では、fetch
関数を使って、DELETE
リクエストを送信しています。
method: 'DELETE'
:HTTPのDELETEメソッドを指定headers
:リクエストヘッダを設定(ここではJSON形式を指定)body
:削除対象のユーザー情報(JSON形式)
リクエストがサーバーに送られると、先ほどの deleteUser
メソッドが実行され、指定したユーザーが削除されます。そして、成功したら「User deleted successfully!」というメッセージを返します。
@DeleteMappingの使い方【応用編】
ここからは、@DeleteMapping
の応用的な使い方を紹介します。さまざまな状況に対応した削除処理の実装方法を学びましょう。
1. バリデーションの追加
削除前にバリデーションを行いたい場合、リクエストのデータや状態を確認する処理を加えることができます。
@DeleteMapping("/users/{id}")
public ResponseEntity<String> deleteUser(@PathVariable Long id) {
if (!userService.existsById(id)) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("ユーザーが存在しません");
}
userService.deleteUser(id);
return ResponseEntity.ok("ユーザーが削除されました");
}
この例では、削除対象のユーザーが存在しない場合、404エラーを返しています。これにより、削除リクエストが有効かどうかをチェックすることができます。
2. 複数データの削除
@DeleteMapping
を使って、複数のデータを一度に削除することも可能です。リクエストボディに削除対象のIDリストを含める場合の例を見てみましょう。
@DeleteMapping("/users")
public ResponseEntity<String> deleteUsers(@RequestBody List<Long> userIds) {
userService.deleteUsers(userIds); // IDリストに基づいてユーザーを削除
return ResponseEntity.ok("ユーザーが削除されました");
}
この例では、POSTリクエストのようにリクエストボディに削除対象のIDリストを受け取り、サービスで一括削除を行います。
3. ヘッダー情報を使った削除
削除処理を行う際に、リクエストヘッダーで認証情報を確認し、認証が成功した場合にのみ削除処理を行うケースもあります。
@DeleteMapping("/users/{id}")
public ResponseEntity<String> deleteUserWithAuth(@PathVariable Long id, @RequestHeader("Authorization") String token) {
if (!authService.isAuthorized(token)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("認証に失敗しました");
}
userService.deleteUser(id);
return ResponseEntity.ok("ユーザーが削除されました");
}
このコードでは、削除リクエストに認証ヘッダーを追加し、トークンの有効性を確認してから削除を実行しています。
@DeleteMappingの引数
@DeleteMapping
では、さまざまな引数を指定してリクエスト処理をカスタマイズできます。ここでは、その代表的な引数について説明します。
1. value属性
@DeleteMapping
のvalue
属性は、リクエストを受け付けるURLパスを指定します。
@DeleteMapping(value = "/users/{id}")
public ResponseEntity<String> deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return ResponseEntity.ok("ユーザーが削除されました");
}
このコードでは、/users/{id}
へのDELETEリクエストを処理します。
2. consumes属性
consumes
属性を使うことで、リクエストのメディアタイプを指定できます。これにより、リクエストが特定の形式(たとえばJSON形式)である場合のみメソッドが実行されるようになります。
@DeleteMapping(value = "/users", consumes = "application/json")
public ResponseEntity<String> deleteUsers(@RequestBody List<Long> userIds) {
userService.deleteUsers(userIds);
return ResponseEntity.ok("ユーザーが削除されました");
}
このコードでは、application/json
の形式で送信されたリクエストのみを処理します。
3. produces属性
produces
属性は、レスポンスのメディアタイプを指定するために使います。削除後にJSON形式のレスポンスを返す場合の例です。
@DeleteMapping(value = "/api/users/{id}", produces = "application/json")
@ResponseBody
public ResponseEntity<Map<String, String>> deleteUserAndReturnJson(@PathVariable Long id) {
userService.deleteUser(id);
Map<String, String> response = new HashMap<>();
response.put("message", "ユーザーが削除されました");
return ResponseEntity.ok(response);
}
このコードでは、削除結果をJSON形式で返しています。
おわりに
@DeleteMapping
は、データの削除処理を簡単に行える便利なアノテーションです。特にREST APIの開発では、データの操作に不可欠な機能の一部となります。今回は、基本的な使い方から応用的な使い方まで幅広く紹介しました。この記事を参考に、さまざまな削除処理を試してみてください!
このように@DeleteMapping
は、削除操作を簡単に行える強力なツールです。次回は他のHTTPメソッドについても同じように学んでいきましょう!
もっと詳しく知りたい方は、Spring公式ドキュメントを見てみてくださいね。
他のMappingについて知りたい方はこちらをどうぞ!↓↓