gpt4 book ai didi

java - jersey-spring3 Bridge 找不到我的资源

转载 作者:行者123 更新时间:2023-12-01 13:40:25 24 4
gpt4 key购买 nike

我正在使用 Jersey/Spring 桥 ( https://jersey.java.net/documentation/latest/spring.html ),但我无法让它通过 Spring XML 配置文件查看我的 Jersey 资源。

(Spring 3.2、Jersey 2.5、jersey-spring3 2.5、jackson-jaxrs-json-provider 2.2.3。)

在我的 Spring 配置文件中

<context:component-scan base-package="com.fasterxml.jackson.jaxrs.json, com.mycompany.mappers, com.mycompany.resources" />

SpringComponentProvider.initialize() 成功,并且 SpringComponentProvider.bind 被一堆类调用(好吧,实际上只是 Jersey 服务器的 WADL 包中的东西),但我的资源类没有被调用。

我可以看到 Spring 正在寻找我的资源:

2013-12-30 16:47:24,246 [main]  org.springframework.beans.factory.support.DefaultSingletonBeanRegistry:215  DEBUG   Creating shared instance of singleton bean 'myResource'
2013-12-30 16:47:24,246 [main] org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory:432 DEBUG Creating instance of bean 'myResource'

文档 ( https://github.com/jersey/jersey/tree/2.5/examples/helloworld-spring-webapp ) 中引用的示例应用定义了 org.glassfish.jersey.server.ResourceConfig 的 Jersey 应用程序子类,并以编程方式注册资源。我希望使用 Spring XML 配置文件来绑定(bind)资源,而不是对它们进行硬编码。 (这曾经在 Jersey 1.x 中工作。)

如何让 Jersey 2 识别我的资源?

最佳答案

我会回答我自己的问题。

答案是 Jersey 2 的 Spring 桥不支持 <context:component-scan .../>并且您必须以编程方式注册您的资源。

查看 Jersey/Spring 文档 ( https://jersey.java.net/documentation/latest/spring.html ) 并严格遵循 Spring 示例应用程序 ( https://github.com/jersey/jersey/tree/master/examples/helloworld-spring-webapp )...如果您偏离了该路径,那么它将无法工作。

关键部分是子类 ResourceConfig (例如 https://github.com/jersey/jersey/blob/master/examples/helloworld-spring-webapp/src/main/java/org/glassfish/jersey/examples/helloworld/spring/MyApplication.java )像这样:

public class MyApplication extends ResourceConfig {

public MyApplication () {
register(MyRequestContextFilter.class);
register(MyResource.class);
packages("com.mycompany.resources");
...
}
}

然后,您可以使用 javax.ws.rs.Application 在应用程序描述符中命名您的子类(例如 https://github.com/jersey/jersey/blob/master/examples/helloworld-spring-webapp/src/main/webapp/WEB-INF/web.xml ):

<servlet>
<servlet-name>SpringApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.glassfish.jersey.examples.helloworld.spring.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

关于java - jersey-spring3 Bridge 找不到我的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com