Spring jersey如何在多个上下文中公开服务
我使用SpringJersey公开rest服务。My web.xml如下所示:Spring jersey如何在多个上下文中公开服务,spring,rest,jersey,Spring,Rest,Jersey,我使用SpringJersey公开rest服务。My web.xml如下所示: <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> </servlet> <ser
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
泽西岛休息服务
com.sun.jersey.spi.spring.container.servlet.SpringServlet
泽西岛休息服务
/休息/*
比如说标准。
我在很多包中都有很多rest服务,我需要在两个上下文中使用它们,比如“基本”和“高级”服务。此外,我需要去掉url模式中的“rest”前缀。因此,我考虑将它们分成两个包,然后在web.xml中使用com.sun.jersey.config.property.packages init param定义两个jersey servlet:
<servlet>
<servlet-name>Jersey REST Service</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.example.app.rest.base</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/base/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Another Jersey REST Service</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.example.app.rest.advanced</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Another Jersey REST Service</servlet-name>
<url-pattern>/advanced/*</url-pattern>
</servlet-mapping>
泽西岛休息服务
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.config.property.packages
com.example.app.rest.base
泽西岛休息服务
/基地/*
另一项泽西岛休息服务
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.config.property.packages
com.example.app.rest.advanced
另一项泽西岛休息服务
/先进的/*
不幸的是,由于applicationContext.xml中设置了组件扫描
<context:component-scan base-package="com.example.app" />
忽略属性com.sun.jersey.config.property.packages(可以在每个上下文下访问所有rest服务),并且不能这样处理
我想知道我怎样才能用另一种方式来处理这个问题。我唯一不想做的事就是
<url-pattern>/*</url-pattern>
/*
抓住一切 您可以指定多个包。用逗号把它们分开
<context:component-scan base-package="com.example.app,com.sun.jersey" />
您还可以定义两个组件扫描项,它们也应该可以正常工作
如果软件包差异化没有帮助,请使用
然后,只需为每个服务创建一个单独的applicationContext,但使用contextConfigLocation的init参数和该应用程序上下文的位置/名称的init值。因此,如果您为每个服务加载特定的应用程序上下文,组件扫描筛选将加载一个服务所需的所有内容,并排除另一个服务
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/rest-service1.xml</param-value>
</init-paraam>
上下文配置位置
WEB-INF/rest-service1.xml
事实上,如果您为每个文件创建一个单独的xml文件,我相信您可以在那个时候使用不同的包 您可以指定多个包。用逗号把它们分开
<context:component-scan base-package="com.example.app,com.sun.jersey" />
您还可以定义两个组件扫描项,它们也应该可以正常工作
如果软件包差异化没有帮助,请使用
然后,只需为每个服务创建一个单独的applicationContext,但使用contextConfigLocation的init参数和该应用程序上下文的位置/名称的init值。因此,如果您为每个服务加载特定的应用程序上下文,组件扫描筛选将加载一个服务所需的所有内容,并排除另一个服务
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/rest-service1.xml</param-value>
</init-paraam>
上下文配置位置
WEB-INF/rest-service1.xml
事实上,如果您为每个文件创建一个单独的xml文件,我相信您可以在那个时候使用不同的包 另请参阅:问题在于基本包的设置方式是所有rest服务在两种上下文下都可用。您可以尝试使用筛选器。我又加了一些可能会有帮助的东西,应该有用。我只是想知道,如果没有“包”方法,是否还有其他方法来处理它。另请参阅:问题是基本包的设置方式是,所有rest服务在这两种上下文下都可用。您可以尝试使用筛选器。我又加了一些可能会有帮助的东西,应该有用。我只是想知道,如果没有“一揽子”办法,是否还有其他解决办法。