在泽西岛注册资源和软件包

时间:2018-12-13 10:21:44

标签: java rest jax-rs jersey-2.0

我决定在此部分替换 Web .XML:

   <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-
     class>org.glassfish.jersey.servlet.ServletContainer</servlet-     
     class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.skillsimprover.restexamples.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>

      <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/api/*</url-pattern>
      </servlet-mapping>

我指向servlet容器 Jersey ,该容器将接受对 REST -控制器,指示在启动时有必要在路径 com.skillsimprover.restexamples.rest 上扫描软件包 REST ,并指出资源的所有方法和类的基本URI均用 / api / *

填充

JAX-RS 2.x 版本开始,您可以使用应用 ResourceConfig 类,用于注册程序包和资源。

我执行了这样的代码:

  @ApplicationPath("api")
    public class JerseyConfig  extends ResourceConfig {

    public JerseyConfig() {
        packages("com.skillsimprover.restexamples.rest");
        register(EmployeApi.class);
    }
    }

因此,必须指定要扫描的软件包以及其中的软件包。我使用注释 @ApplicationPath(“ api”),认为是要替换的

 <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
 </servlet-mapping>

但没有任何效果。

可能是个错误? 还有,为什么我已经指定了要扫描的程序包,所以为什么需要指定资源类?

为什么此方法不能替换Web.XML以及如何替换Web。 xml?

如果资源类可以很多,则它们将需要大量 寄存器? 也就是说,使用Web.XML更好吗?

还是可以绕开它?

<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>


        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <version>${jersey.rest.version}</version>
        </dependency>


        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>${jersey.rest.version}</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>2.26</version>     
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlets.version}</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

1 个答案:

答案 0 :(得分:0)

因此, Paul Samsotha (在评论上方)告诉我,需要更改人工制品
article jersey-container-servlet 上的 jersey-container-servlet-core

现在是pom.xml。

<dependencies>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>${mysql.version}</version>
   </dependency>


   <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-servlet</artifactId>
      <version>2.27</version>
   </dependency>


   <dependency>
       <groupId>org.glassfish.jersey.media</groupId>
       <artifactId>jersey-media-json-jackson</artifactId>
       <version>${jersey.rest.version}</version>
   </dependency>

   <dependency>
      <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>2.26</version>       
   </dependency>

       <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>javax.servlet-api</artifactId>
           <version>${servlets.version}</version>
           <scope>provided</scope>
       </dependency>

</dependencies>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <resource-ref>
        <description>This section describes link to the DataSource JNDI resource</description>
        <res-ref-name>jdbc/personnel_department_db_link</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

还有配置文件,用于注册类和程序包

@ApplicationPath("api")
public class JerseyConfig  extends ResourceConfig {

    public JerseyConfig() {

        packages("com.skillsimprover.restexamples.rest");
        register(AuthenticationResource.class);
        register(AccessDeniedExceptionMapper.class);
        register(AuthenticationExceptionMapper.class);
        register(DataNotFoundExceptionMapper.class);
    }
}

我有一个问题。

我已经看到了注册资源类的示例,并且除非未注册JerseyСonfig软件包,否则Jersey不足以找到资源类。 如果 ExceptionMapper 类型类位于已经注册用于扫描的软件包中,是否需要在JerseyСonfig中注册它们?