Jersey @Path 在 Jetty+servlet 中不起作用
Jersey @Path not working in Jetty+servlet
我无法让 Jetty + servlet + Jersey 的组合正常工作。这是我的步骤:
1. pom.xml
<packaging>war</packaging>
...
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.17</version>
</dependency>
</dependencies>
2。 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" metadata-complete="false" version="3.1">
<servlet>
<servlet-name>org.example.MyApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>org.example.MyApplication</servlet-name>
<url-pattern>/resources</url-pattern>
</servlet-mapping>
</web-app>
3。来源
package org.example;
import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ApplicationPath;
@ApplicationPath("resources")
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("org.example");
}
}
package org.example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public class MyResource {
@GET
public String get() {
return "{\"hello\": 1337}";
}
}
我部署通过执行 mvn clean compile package
创建的 WAR,方法是将其复制到 web-apps
目录。访问以下 URL returns 我的硬编码 JSON:
http://localhost:8080/test-1.0-SNAPSHOT/resources
{"hello": 1337}
现在,我更改资源中的 @Path
:
@Path("/bla")
@Produces(MediaType.APPLICATION_JSON)
public class MyResource {
@GET
public String get() {
return "{\"hello\": 1337}";
}
}
现在,以下 URL 中的 none 似乎有效:
http://localhost:8080/test-1.0-SNAPSHOT/resources/bla
http://localhost:8080/test-1.0-SNAPSHOT/bla
http://localhost:8080/test-1.0-SNAPSHOT/resources
http://localhost:8080/test-1.0-SNAPSHOT/resources/bla/
...
我尝试了几种组合,但无法正常工作。
尝试将此添加到您的 web.xml。这将启用球衣的包裹扫描,因此将扫描您的包裹 org.example
.
<servlet>
<servlet-name>Services</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
org.example
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.scanning.recursive</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Services</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
在这里您可以看到一个完整的工作示例(为 tomcat 定义),但我已经在码头上成功移植了它。
https://github.com/DominikAngerer/java-GsonJerseyProvider/blob/master/WebContent/WEB-INF/web.xml
这里还有一些引导帮助 - 它使用 Jersey 作为 API 带有 jetty 的部分 - 它还有一个很好的教程,可以帮助你很多!
https://github.com/amacoder/demo-restWS-spring-jersey-jpa2-hibernate
我无法让 Jetty + servlet + Jersey 的组合正常工作。这是我的步骤:
1. pom.xml
<packaging>war</packaging>
...
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.17</version>
</dependency>
</dependencies>
2。 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" metadata-complete="false" version="3.1">
<servlet>
<servlet-name>org.example.MyApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>org.example.MyApplication</servlet-name>
<url-pattern>/resources</url-pattern>
</servlet-mapping>
</web-app>
3。来源
package org.example;
import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ApplicationPath;
@ApplicationPath("resources")
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("org.example");
}
}
package org.example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public class MyResource {
@GET
public String get() {
return "{\"hello\": 1337}";
}
}
我部署通过执行 mvn clean compile package
创建的 WAR,方法是将其复制到 web-apps
目录。访问以下 URL returns 我的硬编码 JSON:
http://localhost:8080/test-1.0-SNAPSHOT/resources
{"hello": 1337}
现在,我更改资源中的 @Path
:
@Path("/bla")
@Produces(MediaType.APPLICATION_JSON)
public class MyResource {
@GET
public String get() {
return "{\"hello\": 1337}";
}
}
现在,以下 URL 中的 none 似乎有效:
http://localhost:8080/test-1.0-SNAPSHOT/resources/bla
http://localhost:8080/test-1.0-SNAPSHOT/bla
http://localhost:8080/test-1.0-SNAPSHOT/resources
http://localhost:8080/test-1.0-SNAPSHOT/resources/bla/
...
我尝试了几种组合,但无法正常工作。
尝试将此添加到您的 web.xml。这将启用球衣的包裹扫描,因此将扫描您的包裹 org.example
.
<servlet>
<servlet-name>Services</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
org.example
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.scanning.recursive</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Services</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
在这里您可以看到一个完整的工作示例(为 tomcat 定义),但我已经在码头上成功移植了它。
https://github.com/DominikAngerer/java-GsonJerseyProvider/blob/master/WebContent/WEB-INF/web.xml
这里还有一些引导帮助 - 它使用 Jersey 作为 API 带有 jetty 的部分 - 它还有一个很好的教程,可以帮助你很多! https://github.com/amacoder/demo-restWS-spring-jersey-jpa2-hibernate