Как отказаться от десериализации нераспознанных свойств с помощью JSON-B
Я пытаюсь перенести детали реализации некоторого кода привязки данных JSON для использования API-интерфейсов JSON-B Java EE 8 вместо Джексона.
Чтобы соответствовать стандартному поведению Джексона, я хочу отклонить любые попытки десериализации полезной нагрузки JSON в POJO, когда полезная нагрузка JSON содержит нераспознанные атрибуты.
Например, если у меня есть следующий файл JSON:
{
"name": "Bob",
"extraProp": "Something"
}
И у меня есть следующий Java-объект, который моделирует эти данные как:
public class Thing {
public String name;
// no mention of "extraProp"
}
Как бы я отклонил попытки связать вышеупомянутые данные JSON с вышеуказанным POJO?
Если я попробую следующее, Thing
объект создается без ошибки (здесь я хочу, чтобы произошла ошибка):
Jsonb jsonb = JsonbProvider.provider()
.create()
.build();
Thing t = jsonb.fromJson(new FileReader("thing.json"), Thing .class);
1 ответ
К сожалению, насколько я могу судить, спецификация JSON-B не позволяет этого.
Раздел 3.18 говорит
Когда реализация связывания JSON во время десериализации обнаруживает ключ в паре ключ / значение, который он не распознает, он должен обрабатывать остальную часть документа JSON так, как если бы элемент просто не появлялся, и, в частности, реализация НЕ ДОЛЖНА трактовать это как ошибку состояние.
Однако эталонная реализация, кажется, поддерживает свойство jsonb.fail-on-unknown-properties, которое вы можете установить, чтобы включить это. Johnzon, другая реализация, также, кажется, но она не задокументирована (пока?). Его свойство называется "johnzon.fail-on-unknown-properties".