java - Jersey JAX-RS 在嵌入式 Jetty 上注册更多 Controller

标签 java rest jersey jax-rs embedded-jetty

我正在尝试使用 Jersey JAX-RS 实现一个 Restful 网络服务。 我嵌入了一个 Jetty 网络服务器并想在其上注册所有 Controller 。

我基于这个例子: https://nikgrozev.com/2014/10/16/rest-with-embedded-jetty-and-jersey-in-a-single-jar-step-by-step/

其中 EntryPoint 是 Controller :

@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();
    }
  }
}

如何注册多个 Controller ?

如果我添加其他 Controller 类作为参数,我不知道我必须为每个 Controller 类指定什么键名,因为只有“jersey.config.server.provider.classnames”似乎有效并且工作一次。 谢谢。

最佳答案

因为您只能使用该属性一次,所以您需要使用逗号分隔列表作为值 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

通过声明要扫描的包,Jersey 将递归(默认情况下)扫描该包并注册所有带注释的@Path@Provider它在扫描中找到的类。

关于java - Jersey JAX-RS 在嵌入式 Jetty 上注册更多 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52551546/

相关文章:

java - 在部署在 Tomcat 上的 Web 应用程序中初始化 Spring 上下文后运行代码

javascript - 没有显示值

python - pytest 使用变量自省(introspection)断言消息自定义

rest - 计算 REST API 的 ETag

java - 如何访问 Web api 方法内的资源过滤器中生成的对象

java - 使用 JAXB 在 Jersey RESTful API 的 JSON 输出中包含空元素

java - Google Chrome 使用 Selenium 进行节流

Java-读取 YAML 文件 - 线程 "main"中出现异常无法在读取器中创建 property=Envs

java - RSA加密(java)读取字符串输入

tomcat - Jersey - 不扫描资源?