Java ServletのHttpServletのdoPutメソッド完全ガイド!初心者でもわかるPUTリクエストの使い方と実装方法
生徒
「Servletでデータを送信して新しいリソースを作ったり更新したりするには、どうすればいいんですか?」
先生
「それにはPUTリクエストを使います。JavaのHttpServletではdoPut()メソッドで処理できますよ。」
生徒
「POSTとの違いって何ですか?」
先生
「それでは、doPut()メソッドの役割やPUTリクエストの使いどころを具体的に見ていきましょう。」
1. doPutメソッドとは
doPut()メソッドは、Java ServletのHttpServletクラスに用意されている保護されたメソッドで、HTTPのPUTリクエストを処理するために使います。
PUTは主に、リソースの「更新」や「作成」を目的としたリクエストで、RESTful APIにおいては非常によく使われるHTTPメソッドのひとつです。
doPut()をオーバーライドすることで、クライアントから送られてくるデータを受け取り、それをサーバー側で処理することができます。
2. PUTリクエストとPOSTの違い
初心者にとって混乱しがちなのがPOSTとPUTの違いです。
- POST:既存のリソースに「追加」や「送信」する(部分更新、データ登録など)
- PUT:指定したリソースを「上書き」する(全体更新や新規作成など)
たとえば、特定のIDを持つユーザー情報を更新したい場合には、PUTが適しています。
3. doPutメソッドの基本的な実装方法
ServletでPUTリクエストを処理するには、HttpServletを継承したクラスでdoPut()メソッドをオーバーライドします。
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
public class UpdateServlet extends HttpServlet {
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response)
throws IOException {
StringBuilder body = new StringBuilder();
try (BufferedReader reader = request.getReader()) {
String line;
while ((line = reader.readLine()) != null) {
body.append(line);
}
}
// ここで受け取ったデータを処理する
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().write("PUTデータを受信しました: " + body.toString());
}
}
このコードでは、BufferedReaderを使ってクライアントから送られたデータを読み取り、それをレスポンスとして返しています。
4. JSONデータの受け取りと解析
doPut()ではJSON形式のデータを受け取ることも多いため、JSONパーサー(例:JacksonやGson)を使ってデータを解析するのが一般的です。
下記はJacksonライブラリを使用してJSONデータを解析する一例です。
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(body.toString(), User.class);
こうすることで、送られてきたJSON文字列をJavaのオブジェクトに変換し、データの操作がしやすくなります。
5. doPutでのレスポンス制御
クライアントに対して、処理結果をHTTPステータスコードで伝えることも大切です。response.setStatus()を使うことで、成功やエラーの状態を明示できます。
SC_OK(200):更新成功SC_CREATED(201):新規作成成功SC_BAD_REQUEST(400):リクエスト不正
ステータスコードの適切な設定は、APIの信頼性と使いやすさにつながります。
6. doPutメソッドの活用シーン
doPut()メソッドは、以下のような場面で非常に役立ちます。
- ユーザー情報の更新(IDを指定して上書き)
- 設定ファイルやJSONデータの保存
- RESTful APIでのリソース管理
特にREST APIでは、PUTとPATCHを使い分けて、更新操作をきれいに分離するのが一般的です。
7. セキュリティとバリデーション
doPut()で受け取ったデータは、必ずバリデーション(検証)を行う必要があります。形式チェックや必須項目の確認を行わないと、意図しないデータで上書きされる危険があります。
また、認証・認可処理と組み合わせることで、信頼できるユーザーだけがリソースを更新できるようにすることも重要です。
8. クライアントからのテスト方法
doPut()の動作確認は、curlやPostmanを使って行うのが一般的です。以下はcurlコマンドでJSONデータをPUTする例です。
curl -X PUT -H "Content-Type: application/json" -d '{"name":"Taro"}' http://localhost:8080/api/user/1
このようにして簡単にdoPut()のテストが可能です。