Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring jersey如何在多个上下文中公开服务_Spring_Rest_Jersey - Fatal编程技术网

Spring jersey如何在多个上下文中公开服务

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

我使用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>
<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服务在这两种上下文下都可用。您可以尝试使用筛选器。我又加了一些可能会有帮助的东西,应该有用。我只是想知道,如果没有“一揽子”办法,是否还有其他解决办法。