Стандарты JSON - и полиморфизм - PullRequest
0 голосов
/ 06 марта 2019

Мы в основном Java магазин с Spring / Hibernate и т. Д. У нас есть REST на основе API, который потребляется нашими клиентами, которые могут или не могут использовать Java.

Одна из проблем, с которой сталкиваются наши клиенты, - это преобразование объекта в конкретный тип из-за полиморфизма.

Если все наши клиенты использовали Java/Spring, я могу настроить параметры сопоставителя объектов для получения информации о типах.Один такой пример можно найти по адресу baeldung и polymorphism

Я не уверен, считается ли внедренная информация о типах созданной JSON допустимой JSON другими синтаксическими анализаторами JSON, которые говорят вPython / Node - Javascript / .NET и т. Д. И будет ли он нарушать их код.

Существуют ли какие-либо стандарты в отношении информации о типах, встроенной в JSON, как JacksonЭто.Поиск Google не выявил много.

1 Ответ

2 голосов
/ 06 марта 2019

Нет единого стандарта, которому должны следовать все фреймворки.Даже Jackson может делать это по-разному, независимо от того, что пользователь решит использовать.Также Jackson всегда генерирует valid JSON, даже когда используется полное имя класса, например "org.baeldung.jackson.inheritance.Car" или "org.baeldung.jackson.inheritance.Truck".Чтобы он работал и был прост в использовании, вы должны уточнить все base types и subtypes в:

  • документации
  • JSon Schema

ТамНет смысла отправлять полное имя class, потому что клиенты, не являющиеся Java, в любом случае не распознают их автоматически.Итак, вам нужно создать отображение:

  • BP - базовый продукт
  • P1 - продукт 1
  • P2 - продукт 2
  • ...

Вы также должны указать, что, например, каждый объект содержит свойство "type", для которого будет установлено одно из приведенного выше списка:

[
   {
      "type":"P1",
      "model":"S500",
      "cost":250.0
   },
   {
      "type":"P2",
      "model":"NQR",
      "capacity":7500.0
   }
]

Выше следует предоставить достаточно информации для deserialise любого payload.

...