Можно заранее проверить, можно ли сериализовать данный тип в JSON (т.е. преобразовать из строго типизированного в слабо типизированный формат), но нет способа проверить, можно ли десериализовать данный тип в POJO до тех пор, пока вы не получите фактическое значение JSON во время выполнения (т. е. конвертирование из слабо типизированного формата в строго типизированный формат).
В общем случае правила для сериализуемого типа просты:
- Класс должен быть доступен (опубликован c или защищен)
- Если класс является внутренним классом, он должен быть установлен c
- Ноль или более publi c поля / получатели, которые содержат / возвращают сериализуемые типы
В общем случае правила для десериализуемого типа:
- Класс должен быть доступен (publi c или защищен)
- Если класс является внутренним классом, он должен быть установлен c
- Ноль или более publi c полей / сеттеров, которые содержат / возвращают десериализуемые типы
- Класс должен иметь паблику c конструктор без аргументов (или ctor, помеченный
@JsonbCreator
) - ИЛИ У класса должен быть фабричный метод c stati c, аннотированный
@JsonbCreator
Вы можете обнаружить, что то, что составляет «конвертируемый тип», является очень широким критерием в JSON -B (или любой другой библиотеке Java JSON). Например, строка JSON string {}
может быть десериализована в любой тип, который имеет конструктор publi c no-args. Аналогично, класс Java, у которого нет полей publi c или методов-получателей, будет сериализован в строку JSON {}
.
Поскольку конвертируемый тип является таким широким термином, было бы полезно если вы укажете немного дальше, чего вы пытаетесь достичь - возможно, есть более конкретный c подход, который я мог бы предложить.
Дополнительная информация:
Многие из наиболее распространенных поддерживаются используемые классы из JDK. См. разделы 3.3 - 3.5 JSON -B spe c для полного списка. Помимо встроенных классов, требования указаны в разделе 3.7 JSON -B spe c.
Для десериализации существует больше требований, чем для сериализации. Они подробно описаны в разделе 3.7 и в разделе 4.5 .