我有一个Java类,其中包含一个Optional字段。 我正在使用Jackson 2.8.3(从Spring web 4.3.3中调用)将该类序列化为JSON。
我希望在Optional为空时使序列化器跳过该字段,并且在存在时序列化包含的字符串。以下是我想要的具有两个对象列表的示例结果:
即使我在类中注释“bar”字段,结果也是这样。
有没有办法使用Jackson注释或自定义序列化程序来实现像第一个列表那样的结果?
我希望在Optional为空时使序列化器跳过该字段,并且在存在时序列化包含的字符串。以下是我想要的具有两个对象列表的示例结果:
[
{
"id": 1,
"foo": "bar"
},
{
"id": 2,
}
]
这里,id为2的对象的foo选项为空。
然而,我收到的是:
[
{
"id": 1,
"foo": {
"present": true
}
},
{
"id": 2,
"foo": {
"present": false
}
}
]
即使我在类中注释“bar”字段,结果也是这样。
@JsonInclude(JsonInclude.Include.NON_ABSENT)
public Optional<String> getFoo() { ...
有没有办法使用Jackson注释或自定义序列化程序来实现像第一个列表那样的结果?
Optional
用作bean的字段是一个不好的想法。 - biziclopnull
被认为是另一个值。而如果您正在设计库的 API 中的方法,则可能希望强调它可能不返回值,因此使用Optional
。更多信息请参见此处。 - biziclop