Spring Data делает Spring неспособным найти @Provider от JAXRS? - PullRequest
3 голосов
/ 14 февраля 2012

Я использую Spring + Jersey для создания службы API.В последнее время я пытаюсь включить Spring Data на свой сервер.Я не использую никаких репозиториев в своем работающем коде, просто добавьте одну строку в мой app.xml:

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

Но!Я замечаю, что мой API не работает, жалуясь: " Автор тела сообщения для класса Java xxx, класса Java типа xxx и приложения MIME типа носителя / json не найден "

Если удалитьстрока "jpa: repositories ..." в моем xml, все работает отлично!и все классы провайдеров регистрируются весной:

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

Но, если я добавлю строку «jpa: repositories ...» в мой XML, будет зарегистрирован только «корневой класс ресурсов»:

{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?И как ее решить?

среда:

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>

(Я пыталсядобавить Джерси-Джсон, но все еще не работает)

1 Ответ

0 голосов
/ 05 марта 2015

Вам необходимо зарегистрировать пакеты, которые содержат классы, помеченные @Provider

в Джерси 2 это делается с помощью вызова метода пакетов в вашем классе ResourceConfig.

Я полагаю, есть также атрибут basepackages, который вы можете надеть на сервлет. См. Здесь Автоматическое обнаружение ресурсов JAX-RS с помощью CXF в приложении Spring

...