java - Jersey 2.22 : Where should I define the location of REST resources?

标签 java rest dependency-injection resources jersey

目前,我知道两种方法:

  1. 将其指定为 <init-param>在你的 web.xml 上
  2. 创建一个扩展 ResourceConfig 的类并将其添加到您的 web.xml

我有一个扩展 ResourceConfig 的类因为我需要注册一个 Application Binder ( AbstractBinder ) 来进行依赖注入(inject)。

我应该在哪里定义 REST 资源的位置?这里的最佳实践是什么?

最佳答案

ResourceConfig ,您可以调用packages("reource.packages") ,这与扫描 <init-param> 中声明的包的作用相同。

public class Config extends ResourceConfig {
    public Config() {
        packages("...");
        register(new AbstractBinder()..);
    }
}

要使用Config类(class),你有几个选择。

  1. @ApplicationPath("/appPath") 进行注释

    这样,就不需要 web.xml 了。您需要确保您拥有jersey-container-servlet依赖才能使其发挥作用。注释中的值的工作方式与 <servlet-mapping> 相同。在 web.xml 内。

  2. 声明 Config web.xml 中的类

    <servlet>
        <servlet-name>MyApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>org.foo.Config</param-value>
        </init-param>
    </servlet>
    ...
    <servlet-mapping>
        <servlet-name>MyApplication</servlet-name>
        <url-pattern>/myPath/*</url-pattern>
    </servlet-mapping>
    

您也可以使用ResourceConfig并在 Feature 中注册 Binder ,如所讨论的here

另请参阅:

关于java - Jersey 2.22 : Where should I define the location of REST resources?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33092583/

相关文章:

node.js - Keycloak:使用 nodeJS 的 authZ

angular - 测试依赖于服务的管道

asp.net - 为什么要使用第三方 DI 容器而不是内置 ASP.NET Core DI 容器?

java - Android Grid View 在 Android 版 kitkat 上崩溃

java - 是否可以打包一个可执行文件以便它可以从 Java 运行?

java - PHP 和 Clojure (Java) 代码之间的原始 MD5 base64 编码字符串对于某些字符的不同结果

java - @Inject CDI 不适用于 JAX-RS

Python请求不清理连接导致端口溢出?

spring-boot - 在企业应用程序中部署 Spring Boot 模块 :TransactionManagementConfigurationSelector is not assignable to interface ImportSelector

java - 使用PreparedStatement的最佳方法executeBatch()