将Springbean作为端点注入Jersey SpringServlet

将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

由于WLS 12的问题,将JAX-RS服务从CXF迁移到Jersey

我目前有一个接口,它有JAX-RS注释,然后有两个类实现它(一个是实现默认功能的类,另一个是存根实现)

在CXF中,我可以使用一个属性来驱动哪个实现类通过Spring注入满足ReST请求:

   <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>