【发布时间】:2013-10-23 19:55:31
【问题描述】:
我有一个带有一个可选字段的对象,但找不到合适的注释来建模它。任何想法与杰克逊一起做的正确方法是什么?
【问题讨论】:
-
默认情况下所有字段都是可选的。你遇到了什么问题?
我有一个带有一个可选字段的对象,但找不到合适的注释来建模它。任何想法与杰克逊一起做的正确方法是什么?
【问题讨论】:
在 Jackson 中,您无法区分可选字段和非可选字段。只需在 POJO 中声明任何字段。如果 JSON 结构中不存在某个字段,则 Jackson 不会调用 setter。您可以跟踪是否在 POJO 中使用标志调用了 setter。
【讨论】:
聚会迟到了……
通过 Spring HttpMessageConverter 4.3.6 使用 Jackson 2.8.6,我必须将我的 setter 参数更改为展开的类型,如下所示:
class Foo {
private Optional<Bar> bar;
public void setBar(Bar bar) { // NOT Optional<Bar>, this gives me Optional.empty()
this.bar = Optional.of(bar);
}
// getter doesn't need to be changed
}
【讨论】: