杰克逊将null值传递给构造函数

时间:2012-06-07 11:31:40

标签: json jackson

考虑一个Java类构造函数,它接受两个参数但允许第二个参数为空。

public class Category {
    String name;
    @JsonIgnore Category parent;
    Category(String name,Category parent){this.name = name;this.parent=parent;}
}

我使用@JsonIgnore注释跳过了父级的序列化,因为我不需要它。现在杰克逊无法对其进行反序列化,因为它在最终的Jason中找不到父属性。

是否有其他解决方案,但定义一个只接受name参数的构造函数?

1 个答案:

答案 0 :(得分:0)

可以使命名的构造函数参数丢失 - 您只需获取null而不是value。所以你可以拥有:

@JsonCreator
public Category(@JsonProperty("name") String name, @JsonProperty("whatever") Category parent) { ... }

并且发现的任何内容都会被传递。不会抛出任何例外;杰克逊从未要求财产存在。它只是抱怨它无法识别的东西(除非配置为不)。