Enterprise 中級

冗長なHttpServletボイラープレートを宣言的なJAX-RSリソースクラスに置き換える。

✕ Java EE
@WebServlet("/users")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req,
                         HttpServletResponse res)
            throws ServletException, IOException {
        String id = req.getParameter("id");
        res.setContentType("application/json");
        res.getWriter().write("{\"id\":\"" + id + "\"}");
    }
}
✓ Jakarta EE 8+
@Path("/users")
public class UserResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getUser(
            @QueryParam("id") String id) {
        return Response.ok(new User(id)).build();
    }
}
このコードに問題がありますか? お知らせください。
📐

宣言的ルーティング

HTTPメソッド・パス・コンテンツタイプをアノテーションで定義し、命令型のif/elseディスパッチは不要です。

🔄

自動マーシャリング

POJOを直接返すだけで、@Producesに基づいてJSONやXMLにシリアライズされます。

🧪

テスト容易

リソースクラスはプレーンなJavaオブジェクトで、サーブレットコンテナなしでテストできます。

旧来のアプローチ
HttpServlet
モダンなアプローチ
JAX-RSリソース
JDKバージョン
11
難易度
中級
ServletとJAX-RSの比較
利用可能

Jakarta EE 8 / Java 11以降、広く利用可能

JAX-RS(Jakarta RESTful Web Services)では@GET・@Path・@Producesなどのシンプルなアノテーションを使ってRESTエンドポイントを公開できます。リクエストパラメーターの手動解析やレスポンスのコンテンツタイプ設定は不要で、ランタイムがマーシャリングとルーティングを自動的に処理します。

共有 𝕏 🦋 in