3

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

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

但 !我注意到我的 API 不工作,抱怨“找不到Java 类 xxx 和 Java 类型类 xxx 和 MIME 媒体类型 application/json 的消息正文编写器”

如果我删除 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都丢失了!

我不知道这是否是 Spring-Data 的错误?以及如何解决?

环境 :

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 ,但仍然无法正常工作)

4

1 回答 1

0

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

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

我相信还有一个 basepackages 属性可以放在 servlet 上。请参阅此处在 Spring 应用程序中使用 CXF 自动发现 JAX-RS 资源

于 2015-03-05T10:31:20.263 回答