问题
JSON-B 用户指南在这里建议我应该能够null
使用以下代码序列化值:
Jsonb jsonb = JsonbBuilder.create(new JsonbConfig()
.withNullValues(true)
.withAdapters(new StatusAdapter()));
jsonb.toJson(status,Status.class);
这里的StatusAdapter是我自己的JsonbAdapter impl,用于序列化应用程序的Status类,看起来像这样:
状态适配器
@Override
public JsonObject adaptToJson(Status status) throws Exception {
// ...
return Json.createObjectBuilder()
.add("field1", status.getField1())
.add("field2", status.getField2())
// ... continues ...
.build();
但是,当这些 getter 之一返回时null
,我最终会遇到以下异常:
引起:java.lang.NullPointerException:JsonObjects 名称/值对中的值不能在 org.glassfish.json.JsonObjectBuilderImpl.add(JsonObjectBuilderImpl.java 的 org.glassfish.json.JsonObjectBuilderImpl.validateValue(JsonObjectBuilderImpl.java:222) 处为空:90) 在 mypkg.StatusAdapter.adaptToJson(StatusAdapter.java:14) 在 mypkg.StatusAdapter.adaptToJson(StatusAdapter.java:47) 在 org.eclipse.yasson.internal.serializer.AdaptedObjectSerializer.serialize(AdaptedObjectSerializer.java:103)
pom.xml
我使用了JSON-B入门页面中最新版本的 Maven 依赖项:
<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
它时,序列化 a 可能会给我带来第二个问题。如果这有助于指导答案,我将希望稍后使用 JSON-B 进行反序列化。谢谢你。
更新:
这个yasson 问题表明它可能是一个错误。在那里添加了更多细节。