我使用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..'
对于定义为:
的人,我有POJOperson
{
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返回了非可空字段的默认值,但是没有提到结构会发生什么?
答案 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