我决定在此部分替换 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>
答案 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中注册它们?