bounty还有6天到期。回答此问题可获得+150声望奖励。ps0604希望引起更多关注此问题。
我有这段代码,运行在Tomee与雅加达EE 9.1,它应该生成一个JSON字符串从inputObj
的数据。问题是,有空值的字段被省略,从结果JSON,即使withNullValues
设置为true。任何想法可能是错误的?
JsonbConfig config = new JsonbConfig().withNullValues(true);
String json;
try (Jsonb jsonb = JsonbBuilder.create(config)) {
json = jsonb.toJson(inputObj);
}
3条答案
按热度按时间z18hc3ub1#
我不知道你的完整代码,所以这是我的猜测。如果你没有在类中为属性声明
getter
方法,Json-B
会跳过序列化字段。下面是我的例子。没有Getter
没有getter时的结果
使用Getter
使用getter时的结果
带public关键字
如果你不对字段使用getter方法,那么字段应该是公共的。
使用public时的结果
我希望这对你有帮助。
pepwfjgg2#
是否有可能在您正在序列化的
inputObj
的字段上存在注解,这些注解覆盖了.withNullValues(true)
设置?参考:https://jakarta.ee/specifications/jsonb/3.0/jakarta-jsonb-spec-3.0.html#customizing-null-handling
我还发现了这个:https://github.com/jakartaee/jsonb-api/issues/169#issuecomment-525387593
您没有共享
inputObj
的类,但在我看来,唯一不起作用的方式是类中的字段上有注解,覆盖了config
中的全局设置。z2acfund3#
tl;dr;已解决。
在我读了你下面的评论后,我解决了你的问题。
不,唯一的注解是在字段名称级别@JsonbProperty(“field_name”),而在类级别没有任何注解。
注解的默认值
nillable
是false
。要完成您的请求,您需要将其设置为true
,如下所示。它产生类似于
{... your other json fields, "test":null}
的结果开始,我在这篇文章之前从未使用过JSON-B API。为了你,我已经通过its official webpage安装了它及其依赖项。
我已经启动了一个简单的控制台应用程序,并创建了
pom.xml
来利用网页上编写的Maven依赖项。在更改与Maven相关的任何设置后,不要忘记 reload project。
我的
pom.xml
包含的是而且,当我运行它的官方示例
Dog
类时,我将狗的名字改为null
,它工作起来很有魅力。Dog
类程序开始运行的
Test
类