Servlet против JAX-RS
Замените многословный шаблонный код 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-метод, путь и Content-Type вместо императивного if/else-диспатчинга.
Автоматическая маршализация
Возвращайте POJO напрямую; среда выполнения сериализует их в JSON или XML на основе @Produces.
Упрощённое тестирование
Классы ресурсов — это простые Java-объекты, тестируемые без Servlet-контейнера.
Старый подход
HttpServlet
Современный подход
JAX-RS-ресурс
Начиная с JDK
11
Сложность
Средний
Поддержка JDK
Servlet против JAX-RS
Доступно
Широко доступно начиная с Jakarta EE 8 / Java 11
Как это работает
JAX-RS (Jakarta RESTful Web Services) позволяет предоставлять REST-эндпоинты с помощью простых аннотаций, таких как @GET, @Path и @Produces. Никакого ручного разбора параметров запроса или установки Content-Type в ответе — среда выполнения берёт на себя маршализацию и маршрутизацию автоматически.
Связанная документация
Доказательство