Jersey JAX-RS регистрирует больше контроллеров на встроенном Jetty - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь реализовать спокойный веб-сервис, используя Jersey JAX-RS.Я встроил веб-сервер Jetty и хотел зарегистрировать все контроллеры на нем.

Я основывался на этом примере: https://nikgrozev.com/2014/10/16/rest-with-embedded-jetty-and-jersey-in-a-single-jar-step-by-step/

, в котором EntryPoint является контроллером:

@Path("/entry-point")
public class EntryPoint {

  @GET
  @Path("test")
  @Produces(MediaType.TEXT_PLAIN)
  public String test() {
    return "Test";
  }
}

и это регистрируется с использованием имени ключа " jersey.config.server.provider.classnames " следующим образом:

public class App {

  public static void main(String[] args) throws Exception {
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");

    Server jettyServer = new Server(8080);
    jettyServer.setHandler(context);

    ServletHolder jerseyServlet = context.addServlet(
         org.glassfish.jersey.servlet.ServletContainer.class, "/*");
    jerseyServlet.setInitOrder(0);

    // Tells the Jersey Servlet which REST service/class to load.

    jerseyServlet.setInitParameter(
       "jersey.config.server.provider.classnames",
       EntryPoint.class.getCanonicalName());

    try {
        jettyServer.start();
        jettyServer.join();
    } finally {
        jettyServer.destroy();
    }
  }
}

Как я могу зарегистрировать много контроллеров?

Если я добавлю другие классы контроллеров в качестве параметров, я не знаю, какое имя ключа я должен дать каждому, потому что только " jersey.config.server.provider.classnames " кажетсяработать и работает один раз.Благодаря.

1 Ответ

0 голосов
/ 28 сентября 2018

Поскольку вы можете использовать свойство только один раз, вам нужно использовать список с разделителями-запятыми в качестве значения classOne, classTwo, classThree.

Другой вариант - использовать свойство jersey.config.server.provider.packages и просто передать ему пакетрекурсивное сканирование

jerseyServlet.setInitParam(ServerProperties.PROVIDER_PACKAGES, "my.package.to.scan");

См. ServerProperties для получения дополнительных свойств, которые вы можете установить.Здесь PROVIDER_PACAKGES - константа, строковое значение которой равно jersey.config.server.provider.packages.То же, что и у свойства classnames, есть константа PROVIDER_CLASSNAMES.

Объявляя пакет для сканирования, Джерси будет сканировать этот пакет рекурсивно (по умолчанию) и зарегистрировать все @Pathи @Provider аннотированные классы, которые он находит при сканировании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...