Jackson 2.1.0对象使用JsonIgnore,JsonProperty和动态过滤器进行序列化

时间:2013-06-11 08:42:47

标签: json jackson

我有一个有几个注释的对象: @JsonInclude(Include.NON_DEFAULT),@ JsonIgnore and @JsonProperty(“BLA BLA”)`

我需要序列化我的对象,同时忽略它们的值没有改变的字段,并且总是忽略其他一些字段。在序列化时我希望某些字段在json String中有不同的名称。所有这些都很棒。我的问题是当我尝试动态过滤掉一些字段时!我尝试了我能找到的每个例子,没有任何效果,我不能动态地排除字段。 mabye我的其他注释阻止我这样做?

这是我的代码:

@JsonInclude(Include.NON_DEFAULT) 
public class objectFilter implements Serializable {

@JsonIgnore 
private String filterDescription = "";

private String[] address = {"","0","false"};          

@JsonProperty("status.statusCode")
private String[] statusCode = {"","0","false"};      

@JsonIgnore 
private String statusCodeDescription = "";

@JsonProperty("createdUser.userCode")
private String[] createdUser = {"","0","true"};          
@JsonIgnore 
private String createdUserDescription = "";    

@JsonProperty("List.endorsment")
private String[] endorsment1 = {"","0","false"};      
@JsonProperty("endorsment")
private String[] endorsment2 = {"","0","false"};      
@JsonProperty("List.policy")
private String[] policy1 = {"","0","false"};      
@JsonProperty("policy")
private String[] policy2 = {"","0","false"};  

//getters and setters
}

我希望能够将某些字段排除在序列化之外,即使它们不在@JsonIgnore中 例如:我想要排除除policy2和endorsment2之外的所有字段,即使其他字段中包含值。

如何做到这一点?

请帮忙。

2 个答案:

答案 0 :(得分:0)

因此,有时您只想序列化policy2endorsement2,而有时您想序列化所有字段?如果是这样,你可以使用杰克逊的JSON views来实现这一目标。您首先要为此视图创建一个标记类:

private interface OnlyPolicyTwoAndEndorsementTwo { }

然后你将这两个字段设置为属于这个视图:

..........
@JsonView(OnlyPolicyTwoAndEndorsementTwo.class)
@JsonProperty("endorsment")
private String[] endorsment2 = {"","0","false"};      
..........  
@JsonView(OnlyPolicyTwoAndEndorsementTwo.class)
@JsonProperty("policy")
private String[] policy2 = {"","0","false"};

现在要序列化你可以做的完整对象:

mapper.writer().writeValueAsString(objectFilter);

或者仅序列化policy2endorsement2,您可以这样做:

mapper.writerWithView(OnlyPolicyTwoAndEndorsementTwo.class).writeValueAsString(objectFilter);

答案 1 :(得分:0)

使用Mixins:http://wiki.fasterxml.com/JacksonMixInAnnotations

定义混合类(或接口)的注释 它将与目标类(或接口)一起使用,以便它出现 好像目标类具有混合类具有的所有注释(用于配置序列化/反序列化)