我有一个要求,需要在请求URI中放置版本以命中相应的服务。 例如:如果路径如下:localhost:8080 / context-root / rest / v1 / company
然后可以使用以下网址点击此服务: 本地主机:8080 /上下文根/ REST / V1 /公司 本地主机:8080 /上下文根/休息/公司
要在休息服务过滤器中实现此功能,我会在第二个URL被点击时添加v1。 当我使用带有servlet com.sun.jersey.spi.spring.container.servlet.SpringServlet的jersey 1.8时工作正常
但是当我使用带有servlet org.glassfish.jersey.servlet.ServletContainer的jersey 2.4时,它无法正常工作,因为没有/ rest / company的路径,所以无法完全访问过滤器。 v1被添加到过滤器中。
我在想是否可以点击部分网址(最多/最多),在过滤器中我会更改请求网址以获取正确的路径。
使用web.xml:
#define PARAM_NAME Param
#define GETNAME_(a) #a
#define GETNAME(a) GETNAME_(a)
int Param;
printf("%s = %i\n", GETNAME(PARAM_NAME), PARAM_NAME);
不使用web.xml
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.abc.ws.rest</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.abc.filters.RestServiceFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
工作一个正在命中过滤器类甚至/ rest /公司URL被命中,而不工作一个没有命中过滤器为相同的URL
REST端点类:
<servlet>
<servlet-name>jersey-serlvet</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.abc.ws.rest</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>com.abc.filter.RestServiceFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
更新了pom.xml
@Path("/v1/company")
public class CompanyRestService {
}
RestServiceFilter代码:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.4.1</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>asm-all-repackaged</artifactId>
</exclusion>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>cglib</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.4.1</version>
</dependency>
答案 0 :(得分:0)
我认为这是你的问题:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.abc.ws.rest</param-value>
</init-param>
...
</servlet>