Откуда следует читать JsonSubTypes?

Этот вопрос является копией другого вопроса, который я опубликовал, поскольку я ищу ясности в том, как сериализация / проверка работает в отношении JsonSubTypes

Другой вопрос: InvalidSchemaException с использованием JsonSubTypes, не собирая то, что я определил в базовом интерфейсе

Допустим, у меня есть базовый класс А

A орудует BaseInterface

Если у меня есть подкласс B, который расширяет А, но реализует свои собственные интерфейсы, такие как AlpahInterface, BetaInterface, CharlieInterface. В этом заключается проблема, поскольку проверка не выполняется, потому что AlphaInterface перечисляет только, например, LAMA и поэтому валидация не знает обо всех других типах, определенных в базовом BaseInterface.

Подкласс B реализует только то, что определено AlphaInterface, игнорируя тот факт, что он расширяет BaseInterface, а также игнорирует другие реализованные интерфейсы и явно не обращает внимания на тот факт, что B расширяет A, который реализует BaseInterface. Я мог проверить это, потому что я добавил в AlphaInterface все подтипы, определенные в базовом интерфейсе, и все работает, но я не хочу, чтобы в каждом интерфейсе каждый возможный подтип определялся, поскольку не все они относятся к классу, который их реализует. .

Я бы подумал, что будет выбрана либо расширенная реализация A, либо все реализованные интерфейсы B, а не только первый в листинге.

Пожалуйста, объясните, потому что все чтение, которое я сделал за последние два дня в Интернете, не прояснило для меня это. Если кто-то захочет открыть дискуссионный чат, это тоже будет здорово!

Спасибо.

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
  @Type(value = CatTopic.class, name = "CAT"),
  @Type(value = DogTopic.class, name = "DOG"),
  @Type(value = FishTopic.class, name = "FISH"),
  @Type(value = LamaTopic.class, name = "LAMA")
})
public interface BaseInterface {}

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
  @Type(value = LamaTopic.class, name = "LAMA")
})
public interface AlpahInterface extends BaseInterface {}


// Something to extend A
public class B extends A implements AlpahInterface, BetaInterface, CharlieInterface {}

Играя с моим кодом для AlphaInterface, если я изменю JsonTypeInfo.Id.NAME на JsonTypeInfo.Id.MINIMAL_CLASS, он сможет проверить. Может ли кто-нибудь указать мне на какую-нибудь хорошую документацию о понимании того, что происходит с этим материалом Джексона? Я нахожу примеры, но это основано на предположении, что вы уже это понимаете, тогда как я хочу прочитать подробности функциональности. Спасибо

Elijah 27.07.2018 15:07

С MINIMAL_CLASS новые элементы, которые я создал, работают, но сломали старые. Все еще пытаюсь понять это. Нас трое работают над этой проблемой, и единственное, с чем мы можем согласиться, это то, что тот, кто реализовал этот наш код, сделал это так, как мы не можем найти ни в одном примере в Интернете. Мы в тупике. Мы не собираемся менять кодовую базу, так как у нас есть совершенно новая версия кода, и она должна быть прекращена, и для этого потребуется перекодирование более 300 файлов, и кто знает, какое еще влияние это может иметь. фу

Elijah 27.07.2018 18:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
174
1

Ответы 1

Я не понимаю, где этот код должен читаться в основном листинге JsonSubTypes, но мне удалось решить мою связанную проблему с публикацией. Наконец-то нашел способ решить основную проблему в своем посте по теме. общедоступная аннотация @interface JsonTypeInfo

Что необходимо сделать, так это для каждого из классов, определенных в JsonSubTypes, вы также должны указать для этого класса @JsonTypeName ("ClassName") например

@JsonTypeName("CAT")
public class CatTopic extends A implements AlpahInterface, BetaInterface, CharlieInterface {}

Другие вопросы по теме