У меня уже есть решение моей проблемы, я опишу ее позже, но мне не нравится, почему я спрашиваю.
Я использую новейшие библиотеки трикотажа и джексона. У меня есть служба отдыха для сущности, до сих пор у меня есть 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) по умолчанию для всего будущего запроса. Могу ли я получить лучшее решение?
Ну, я взял совет Адама Гента. Я поставил @JsonIgnore во всех ссылочных полях, реализовал несколько DTO, которые являются только оболочками моих классов сущностей, и я отвечаю в службах отдыха с этими DTO.