gpt4 book ai didi

jersey - Spring Data让spring找不到JAXRS的@Provider?

转载 作者:行者123 更新时间:2023-12-04 20:04:42 25 4
gpt4 key购买 nike

我正在使用 Spring + Jersey 构建 API 服务。最近,我尝试将 Spring Data 合并到我的服务器中。我在运行代码中没有真正使用任何存储库,只需在我的 app.xml 中添加一行:

<jpa:repositories base-package="destiny.web" entity-manager-factory-ref="entityManagerFactoryApp" />

但是!我注意到我的 API 不工作,提示“A message body writer for Java class xxx, and Java type class xxx, and MIME media type application/json was not found

如果我删除 xml 中的“jpa:repositories ...”行,一切正常!并且,所有提供者类都由 spring 注册:

{http://*:8080-1} Registering Spring bean, apiResultJsonWriter, of type destiny.web.api.ApiResultJsonWriter as a provider class
{http://*:8080-1} Registering Spring bean, webApi, of type destiny.web.api.WebApi as a root resource class
{http://*:8080-1} Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'

但是,如果我在我的 XML 中添加“jpa:repositories...”行,则只会注册“根资源类”:

{http://*:8080-1} CDI support is enabled
{http://*:8080-1} Using default applicationContext
{http://*:8080-1} Registering Spring bean, webApi, of type destiny.web.api.WebApi as a root resource class
{http://*:8080-1} Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'

所有 JAXRS 的@Provider(s) 都丢失了!

不知道是不是Spring-Data的bug?以及如何解决?

环境:

spring-3.1
jersey-core-1.8.jar
jersey-server-1.8.jar
jersey-spring-1.8.jar

spring-data-jpa-1.0.3.RELEASE.jar
spring-data-commons-core-1.1.0.RELEASE.jar

服务器:resin-4.0.25

相关依赖:

<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.8</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.0.3.RELEASE</version>
</dependency>

(我尝试添加 jersey-json ,但仍然无法正常工作)

最佳答案

您需要注册包含用 @Provider 注释的类的包

在 Jersey 2 中,这是通过调用 ResourceConfig 类中的 packages 方法来完成的。

我相信您还可以在 servlet 上添加一个 basepackages 属性。看这里Autodiscover JAX-RS resources with CXF in a Spring application

关于jersey - Spring Data让spring找不到JAXRS的@Provider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9276461/

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