Проблема
В руководстве пользователя JSON-B здесь предлагается, чтобы я мог сериализовать null
значения с моим кодом:
Jsonb jsonb = JsonbBuilder.create(new JsonbConfig()
.withNullValues(true)
.withAdapters(new StatusAdapter()));
jsonb.toJson(status,Status.class);
Здесь StatusAdapter - мой собственный JsonbAdapter , предназначенный для сериализации класса приложения Status , и выглядит примерно так:
StatusAdapter
@Override
public JsonObject adaptToJson(Status status) throws Exception {
// ...
return Json.createObjectBuilder()
.add("field1", status.getField1())
.add("field2", status.getField2())
// ... continues ...
.build();
Но когда один из этих методов получения возвращает null
, я получаю исключения, такие как:
Причина: java.lang.NullPointerException: значение в паре имя / значение JsonObjects не может быть нулевым в org.glassfish.json.JsonObjectBuilderImpl.validateValue (JsonObjectBuilderImpl.java:222) в org.glassfish.json.JsonObjectBuilderImpl.add (JsonObjectBuilderImpl.java:90.adaptToJson (StatusAdapter.java:14) в org.eclipse.yasson.internal.serializer.AdaptedObjectSerializer.serialize (AdaptedObjectSerializer.java:103)
pom.xml
Я использовал лatest версии зависимостей Maven со страницы JSON-B Getting Started :
<dependency>
<groupId>javax.json.bind</groupId>
<artifactId>javax.json.bind-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.3</version>
</dependency>
Вопрос
Итак, я неправильно понимаю API?Или это неправильная комбинация библиотек, связанных с JSON?Ошибка в одном из них?
Я тоже понимаю, что сериализация null
может оставить меня со второй проблемой, когда пришло время десериализовать его.Я собираюсь использовать JSON-B для десериализации позже, если это поможет направить ответ.Спасибо.
Обновление:
Эта проблема yasson предполагает, что это может быть ошибкой.Добавил больше подробностей там.