Условно сериализовать коллекцию области передового опыта?

1

У меня уже есть решение моей проблемы, я опишу ее позже, но мне не нравится, почему я спрашиваю.

Я использую новейшие библиотеки трикотажа и джексона. У меня есть служба отдыха для сущности, до сих пор у меня есть 2 метода get: getById и getList, оба возвращают json с помощью jackson. Объект ссылается на себя, используя отношения OneToMany, поэтому он представляет собой набор объектов. Для getList я не хочу, чтобы это поле было сериализовано, и для getById я хочу, чтобы он был сериализован, но по-своему.

Мое решение:

Для getList я использую представление в поле In entity bean. Я использую свой класс JsonView FirstLevelOfCollection:

@JsonView(JacksonViews.FirstLevelOfCollection.class)

В методе getList службы отдыха я использую Object как фильтр вида, поэтому все поля без @JsonView будут включены:

ObjectMapper mapper = new ObjectMapper();
resultString = mapper.writerWithView(Object.class).writeValueAsString(resultObject);

Для getById я использую пользовательскую сериализацию

ObjectMapper mapper = new ObjectMapper();
SimpleModule testModule = new SimpleModule("MyModule", new Version(1, 0, 0, null, null, null));
testModule.addSerializer(Set.class, new EndEventCodesSerializer(Set.class));
mapper.registerModule(testModule);
resultString  = mapper.writeValueAsString(resultObject);

Я не могу использовать @JsonIgnore insted of view, потому что тогда пользовательский сериализатор тоже его не увидит. Он работает, но кажется странным и уродливым, особенно для исключения такой области, чего я тоже хотел достичь, но я не знаю, как использовать исключение (поведение getList) по умолчанию для всего будущего запроса. Могу ли я получить лучшее решение?

  • 2
    Рассмотрим просто использование объекта переноса. Попытка засунуть ваши jpa-сущности DB в JSON, хотя может показаться, что DRY - это куча работы, запутанность и потенциальные проблемы безопасности.
  • 0
    @Adam Gent Вы хотите поместить JsonIgnore в это поле Set в бине сущности (для метода покоя getList) и написать обертку сущности с геттером для этого поля Set (для метода покоя getById)?
Теги:
jackson
jersey

1 ответ

0
Лучший ответ

Ну, я взял совет Адама Гента. Я поставил @JsonIgnore во всех ссылочных полях, реализовал несколько DTO, которые являются только оболочками моих классов сущностей, и я отвечаю в службах отдыха с этими DTO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню