Java 使用jersey在URL中进行REST版本控制

Java 使用jersey在URL中进行REST版本控制,java,spring,rest,jersey,Java,Spring,Rest,Jersey,我有一件运动衫/春季休闲服。我正在尝试使用URL版本控制机制来拥有同一资源的两个版本。 解决这个问题的最好办法是什么 这是我的web.xml,我正在尝试加载2个jersey servlet <servlet> <servlet-name>REST_V1</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet

我有一件运动衫/春季休闲服。我正在尝试使用URL版本控制机制来拥有同一资源的两个版本。 解决这个问题的最好办法是什么

这是我的web.xml,我正在尝试加载2个jersey servlet

<servlet>
    <servlet-name>REST_V1</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.comp.resource.v1</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>REST_V1</servlet-name>
    <url-pattern>/v1/*</url-pattern>
</servlet-mapping>
对于V2

package com.comp.resource.v2;

@Controller
@Path("/user")
public class User_V2 {

}
我看到资源/用户的URI模板错误冲突
有没有更好的办法解决这个问题?任何帮助都值得感谢

似乎问题在于如何加载SpringBean。在web.xml中,如果您在Jersey之外有contextConfigLocation来加载所有bean,那么REST_V1和REST_V2 servlet都与相同的资源名称冲突

下面是我在应用程序上下文中更改的内容。 已从全局applicationContext.xml中删除对资源包的扫描

<context:annotation-config />
<context:component-scan base-package="com.comp.*">
    <context:exclude-filter type="regex" expression="com.comp.resource.*"/>
</context:component-scan>

为每个servlet又添加了2个applicationContext

applicationContext_V1.xml

<context:annotation-config />
<context:component-scan base-package="com.comp.resource.v1"/>

applicationContext_V2.xml

<context:annotation-config />
<context:component-scan base-package="com.comp.resource.v2"/>

在web.xml中的jersey配置中添加了对这些applicationContext文件的引用

<servlet>
    <servlet-name>REST_V1</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.comp.resource.v1</param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext_V1.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>REST_V1</servlet-name>
    <url-pattern>/v1/*</url-pattern>
</servlet-mapping>

休息时间V1
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.config.property.packages
com.comp.resource.v1
上下文配置位置
类路径:applicationContext_V1.xml
休息时间V1
/v1/*
其余的呢

<servlet>
    <servlet-name>REST_V2</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.comp.resource.v2</param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext_V2.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>REST_V2</servlet-name>
    <url-pattern>/v2/*</url-pattern>
</servlet-mapping>

休息时间2
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.config.property.packages
com.comp.resource.v2
上下文配置位置
类路径:applicationContext_V2.xml
休息时间2
/v2/*
可能与此重复:
<servlet>
    <servlet-name>REST_V1</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.comp.resource.v1</param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext_V1.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>REST_V1</servlet-name>
    <url-pattern>/v1/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>REST_V2</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.comp.resource.v2</param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext_V2.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>REST_V2</servlet-name>
    <url-pattern>/v2/*</url-pattern>
</servlet-mapping>