Путь приложения JAX-RS не распознается в RESTEasy

1

Я использую встроенный Jetty 9.1.0.v20131115 с RESTEasy 3.0.7.Final. У меня есть приложение JAX-RS, которое, как я знаю, работает, потому что все мои синглы и классы работают. Это выглядит так:

@ApplicationPath("/foo/")
public class MyApplication extends Application {

Тогда у меня есть такой ресурс:

@Path(value = "bar")
public interface BarResource {

  @GET
  @Path(value = "test")
  public String getTest();

Поэтому я пытаюсь выпустить GET в /foo/bar/test и он терпит неудачу. Он работает только при изменении аннотации ресурса до следующего:

@Path(value = "/foo/bar")
public interface BarResource {

Это побеждает всю цель @ApplicationPath("/foo/"), позволяя определять мои ресурсы относительно некоторого базового пути. Почему RESTEasy не @ApplicationPath аннотацию @ApplicationPath?

  • 0
    MyApplication подобрано?
  • 0
    «... приложение ... которое, я знаю, работает, потому что все мои синглтоны и классы работают».
Показать ещё 2 комментария
Теги:
path
jax-rs
embedded-jetty
resteasy

1 ответ

0
Лучший ответ

Api-doc указывает:

При публикации в контейнере Servlet значение пути приложения может быть переопределено с помощью элемента отображения сервлета в web.xml.

Похоже, это происходит, если вы зарегистрируете RestEasy HttpServletDispatcher следующим образом:

ServletContextHandler servletHandler = new ServletContextHandler();
servletHandler.setInitParameter("javax.ws.rs.Application", "com.company.MyApplication");
servletHandler.addServlet(new ServletHolder(HttpServletDispatcher.class), "/*");

Вы можете попробовать добавить этот параметр init:

servletHandler.setInitParameter("resteasy.servlet.mapping.prefix", "/application-path");
  • 0
    Ах, я читал это, но только теперь понимаю все последствия: @ApplicationPath видимому, имеет отношение только к отсутствующему web.xml . Но как ни странно, я добавляю сервлет (в коде, аналогичном указанному вами) с отображением /foo/* . Если servletHandler.addServlet(...) эквивалентен «отображению сервлета в web.xml», то он должен переопределить то же значение! resteasy.servlet.mapping.prefix использование resteasy.servlet.mapping.prefix в сочетании с программным отображением сервлетов работает. Я до сих пор не понимаю, зачем нужно дополнительное свойство, так как я правильно отображаю сервлет.
  • 0
    Я также попытался сопоставить /foo/* и я также понятия не имею, почему это не работает ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню