将Springbean作为端点注入Jersey SpringServlet
由于WLS 12的问题,将JAX-RS服务从CXF迁移到Jersey 我目前有一个接口,它有JAX-RS注释,然后有两个类实现它(一个是实现默认功能的类,另一个是存根实现) 在CXF中,我可以使用一个属性来驱动哪个实现类通过Spring注入满足ReST请求:将Springbean作为端点注入Jersey SpringServlet,jersey,Jersey,由于WLS 12的问题,将JAX-RS服务从CXF迁移到Jersey 我目前有一个接口,它有JAX-RS注释,然后有两个类实现它(一个是实现默认功能的类,另一个是存根实现) 在CXF中,我可以使用一个属性来驱动哪个实现类通过Spring注入满足ReST请求: <alias name="restProxyApi${restProxyApi.sib:Impl}" alias="restProxyApiEndpoint" /> <jaxrs:server id="jax
<alias name="restProxyApi${restProxyApi.sib:Impl}" alias="restProxyApiEndpoint" />
<jaxrs:server id="jaxrs.restProxyApi" address="/">
<jaxrs:serviceBeans>
<ref bean="restProxyApiEndpoint" />
</jaxrs:serviceBeans>
</jaxrs:server>
我看不出有什么办法可以用球衣做到这一点。Jersey似乎希望我使用Spring的组件扫描并声明API端点所在的包。但这不是我想做的。Jersey中有没有一种方法可以利用Bean Id作为资源,Jersey使用它来满足进入SpringServlet的请求?我也一直在寻找这个问题的解决方案。然而,我认为没有像接口、抽象类/实现这样的机制,SpringIOC经常使用这种机制 我可以想出一个办法,就是不用担心XML配置的声明和实现。但是直接在Spring的beans.xml中将实现类设置为bean。例如: 同一个Restful API有两种不同的实现,比如RestA和RestB,代码可能看起来像
@Path("/restApi")
public class RestA {
@POST
@Path("post/")
public String print(@Context HttpServletRequest req, InputStream is) {
// RestA: do something
}
}
@Path("/restApi")
public class RestB {
@POST
@Path("post/")
public String print(@Context HttpServletRequest req, InputStream is) {
// RestB: do something
}
}
然后,在bean设置xml中,只需将这两个类声明为restful请求的bean,并标记其中一个。。。(这里,RestA处理请求到)
当您想要切换restful API实现时,请标记或删除其他bean
尽管这种方法不能算作真正的解决方案,但它可以用于管理同一restful api的多个实现
<beans>
<bean id="restA" class="a.b.X.RestA" />
<!-- <bean id="restB" class="a.b.y.RestB" /> -->
</beans>