杰克逊对应JSON结构的POJO是否可以为空?

时间:2016-03-29 17:08:11

标签: java json jackson

我使用jackson-annotations 2.4和相关的jar从JSON转换为POJO。假设我的json中有如下结构:

System.Windows.Data Warning: 90 : BindingExpression (hash=25035015): Update - got raw value 'This is a test..'
System.Windows.Data Warning: 94 : BindingExpression (hash=25035015): Update - using final value 'This is a test..'
System.Windows.Data Warning: 102 : BindingExpression (hash=25035015): SetValue at level 0 to VM (hash=48624771) using RuntimePropertyInfo(TextField): 'This is a test..'
System.Windows.Data Warning: 95 : BindingExpression (hash=25035015): Got PropertyChanged event from VM (hash=48624771)
System.Windows.Data Warning: 101 : BindingExpression (hash=25035015): GetValue at level 0 from VM (hash=48624771) using RuntimePropertyInfo(TextField): 'This is a test..'
System.Windows.Data Warning: 80 : BindingExpression (hash=25035015): TransferValue - got raw value 'This is a test..'
System.Windows.Data Warning: 89 : BindingExpression (hash=25035015): TransferValue - using final value 'This is a test..'

对于定义为:

的人,我有POJO
person
{
  name 
 {
   firstName,
   lastName
  }
}

假设我为Name定义了类似的POJO。现在我的问题是,@JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({"name"}) class Person { private Name name; @JsonProperty("name") public Name getName() { return name; } @JsonProperty("name") public void setName(Name name) { this.name = name; } } 中的Name的getter是否可以返回空值,或者它会在幕后实例化?

我尝试在google上搜索,但看起来jackson返回了非可空字段的默认值,但是没有提到结构会发生什么?

2 个答案:

答案 0 :(得分:1)

它取决于你用来解析的json,即:

{
    "name": {
        "firstname": "abc",
        "lastname": "xyz"
    }
}

{
    "name": {
    }
}

上面的两个JSON永远不会为person.getName()返回null,即使节点内的字段丢失也是如此。但另一方面,如果你没有在json上传递节点name,那么person.getName()将始终返回null。例如,此JSON将始终使person.getName()为空:

{
    "name": "abc"
}

答案 1 :(得分:0)

试试这个。这肯定会有用。我面临的同样得到了解决方案。

  @JsonInclude(JsonSerialize.Inclusion.NON_NULL) 

 @JsonInclude( JsonSerialize.Inclusion.NON_EMPTY)

您也可以尝试删除此

 @JsonPropertyOrder({"name"}) //remove this