Я столкнулся с «проблемой полиморфной десериализации», поэтому я настраиваю jackson для добавления информации о типе для неконкретных классов в качестве свойства следующим образом:
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE))
mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_CONCRETE_AND_ARRAYS, "__class__")
Он работает хорошо, но для экземпляров коллекции (например, List) он создает двухэлементный массив, в первой позиции которого находится строка с информацией о типе коллекции (java.util.ArrayList).
Это влияет на структуру json, которую ожидает клиент (Javascript), поскольку там, где он ожидал массив, теперь есть массив с другим внутри него во второй позиции.
Я хочу, чтобы Джексон вставлял информацию о типе только для неконкретных типов, не относящихся к коллекции, поскольку самой структуре не нужен тип реализации коллекции, чтобы правильно десериализовать свойства коллекции.
Возможно ли это настраиваемым образом?