2014-02-20 3 views
1

Учитывая этот репозиторийКак перехватить маршмаллинг (json serial/deserial) из CrudRepository, объявленного как @RepositoryRestResource?

@RepositoryRestResource(path = "u", itemResourceRel="ui", collectionResourceRel = "us") 
public interface IUserRepository extends CrudRepository<Users, Long> { 
} 

Когда я иду через контроллер для вызова моего метода обслуживания findAllUsers(). Я преобразую список объектов (возвращаемый методом), который предоставляется бесплатно) в список объектов модели домена. Этот список объектов модели домена будет правильно десериализоваться в JSON, потому что я контролирую, как выполнять десериализацию. Существует определенная причина, по которой я это делаю, см. Ниже.

Теперь, если я хочу напрямую использовать userRepository, я запускаю цикл во время сериализации, потому что десериализуемый объект поступает из библиотеки com.vividsolutions.jts.geom.Geometry. Этот класс содержит метод, описанный ниже.

Geometry getEnvelope() Returns this Geometrys bounding box. 

Во время десериализации джексон запускается в петлю из-за этого. Я могу исправить процесс десериализации внутри моего контроллера. Как можно перехватить десериализацию от CrudRepository?

Первая идея, которая пришла ко мне, заключалась в том, чтобы создать реализацию моего интерфейса и переопределить все методы, но это побеждает цель кода котельной.

ответ

0

Вы показываете использование @RepositoryRestResource Я предполагаю, что вы используете Spring REST для экспорта своих репозиториев. Для стандартной конфигурации маршалинга Spring MVC см. reference docs.

Точно говоря, вы не перехватываете репозитории. Spring Data REST использует Джексона для маршалирования и отмены комментариев и запросов. Следовательно, вы просто настраиваете Jackson ObjectMapper, который будет использовать SD REST. Чтобы сделать это, вы расширяете RepositoryRestMvcConfiguration и переопределить configureJacksonObjectMapper(…):

class MyConfiguration extends RepositoryRestMvcConfiguration { 

    protected void configureJacksonObjectMapper(ObjectMapper mapper) { 
    // register custom serialializers, modules etc. 
    } 
} 

Для вариантов настройки в общем, посмотрите на Джексона reference documentation.

+0

Да, я использую Spring REST. Когда маршалл Джексона и unmarshall я бегу в бесконечный цикл из-за объекта 'com.vividsolutions.jts.geom.Geometry', который имеет метод, показанный выше. Этот метод возвращает другую 'com.vividsolutions.jts.geom.Geometry', следовательно, цикл, когда un/marshmalling. Вот почему мне нужно настроить этот процесс. – Cool