代码对比
✕ 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 方法、路径和内容类型,而非命令式 switch 语句。
更少代码
50 行 Servlet 样板变为 15 行 JAX-RS 资源。
内置特性
自动内容协商、参数绑定和异常映射。
旧方式
HttpServlet
现代方式
JAX-RS Resource
自 JDK
11
难度
中级
JDK 支持
Servlet 与 JAX-RS
可用
自 Jakarta EE 8 / Java 11 起广泛可用
工作原理
JAX-RS(Jakarta RESTful Web Services)允许您使用注解而非命令式 doGet/doPost 方法来暴露 REST 端点。路由、内容协商和参数绑定都是声明式的。
相关文档