杰克逊为序列化定义自定义bean的正确方法是什么?
我想通过Json-> POJO-> Json过滤不需要的字段。我想如果自定义bean对象中的所有变量都为null,则在序列化为JSON时不会出现自定义bean对象。如果内部的任何变量不为null,则应显示自定义bean对象。
目前,如果属于它的所有变量都为null,我有一个额外的方法来为自定义bean分配空值。我正在寻找的是杰克逊能否做到这一点。
public class JsonFileContext {
//...Some variables
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonView(Views.In.class)
private ContentRecognize contentRecognize;
//...getter/setter method
}
ContentRecognize类
public class ContentRecognize {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String type;
@JsonInclude(JsonInclude.Include.NON_NULL)
private RecognizePattern targetId;
@JsonInclude(JsonInclude.Include.NON_NULL)
private RecognizePattern msgId;
//...getter/setter method
}
预期输出
{
"var1":"var1Content",
"var2":"var2Content"
}
和
{
"var1":"var1Content",
"var2":"var2Content",
"contentRecognize":{
"type":"typeContent"
}
}
当前输出
{
"var1":"var1Content",
"var2":"var2Content",
"contentRecognize":{}
}
和
{
"var1":"var1Content",
"var2":"var2Content",
"contentRecognize":{
"type":"typeContent"
}
}
答案 0 :(得分:1)
您可以使用@JsonIgnoreProperties
或@JsonIgnore
注释之一。
<强> @JsonIgnoreProperties 强>
用于忽略序列化和反序列化中的某些属性,无论其值如何:
防止指定字段被序列化或反序列化(即不包含在JSON输出中;或者即使包含它们也被设置):
@JsonIgnoreProperties({ "internalId", "secretKey" })
忽略JSON输入中的任何未知属性,无异常:
@JsonIgnoreProperties(ignoreUnknown=true)
<强> @JsonIgnore 强>
标记注释,指示带注释的方法或字段 被基于内省的序列化和反序列化忽略 功能。也就是说,它不应该被视为“吸气剂”,“设定者” 或“创造者”。
此外,从Jackson 1.9开始,如果这是唯一的注释 与财产相关联,也会导致整体 要忽略的属性:即,如果setter具有此注释并且 getter没有注释,getter也被有效忽略。它是 仍然可以让不同的访问者使用不同的注释; 所以,如果只有“getter”被忽略,那么其他的访问者(setter或者 字段)需要明确的注释来防止忽视(通常 JsonProperty)。
在你的情况下,我会:
1:
@JsonIgnoreProperties({ "contentRecognize" })
public class JsonFileContext {
[...]
}
2:
public class JsonFileContext {
//...Some variables
@JsonIgnore
private ContentRecognize contentRecognize;
//...getter/setter method
}
3:使用contentRecognize
@JsonIgnore
getter