Столкновение Java EE Servlet и REST пути

Я пытаюсь написать веб-приложение на Java, которое обеспечивает интерфейс HTML и REST. Я хотел бы создать сервлет, который будет предоставлять интерфейс HTML с использованием JSP, но данные также должны быть доступны через REST.

У меня уже есть что-то вроде этого для ОТДЫХА:

@javax.ws.rs.Path("/api/")
public class RestAPI {

   ... // Some methods
}

а также

@WebServlet("/servlet") 
public class MyServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.getWriter().write("Howdy at ");
    }
}

Теперь, когда я меняю аннотацию @WebServlet("/servlet") на @WebServlet("/"), сервлет перестает работать, вероятно, из-за конфликта пути с REST.

Как я могу предоставить REST по определенному пути и HTML в корне?

Спасибо, Лукас Дженделе

1 ответ

Решение

Это, кажется, работает хорошо для меня. Что я сделал:

  1. В моем pom.xmlУ меня есть зависимость от org.wildfly.swarm:undertow (для Servlet API) и org.wildfly.swarm:jaxrs (для JAX-RS). И конечно же плагин Swarm Maven.

  2. Для сервлета у меня есть только один класс:

@WebServlet("/")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("Hello from servlet");
    }
}
  1. Для JAX-RS у меня есть эти 2 класса:
@ApplicationPath("/api")
public class RestApplication extends Application {
}
@Path("/")
public class HelloResource {
    @GET
    public Response get() {
        return Response.ok().entity("Hello from API").build();
    }
}

Чтобы проверить, я бегу curl http://localhost:8080/ а также curl http://localhost:8080/api, Результаты ожидаемые. (Может быть, мой пример слишком прост?)

Другие вопросы по тегам