我有一个有几个注释的对象:
@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之外的所有字段,即使其他字段中包含值。
如何做到这一点?
请帮忙。
答案 0 :(得分:0)
因此,有时您只想序列化policy2
和endorsement2
,而有时您想序列化所有字段?如果是这样,你可以使用杰克逊的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);
或者仅序列化policy2
和endorsement2
,您可以这样做:
mapper.writerWithView(OnlyPolicyTwoAndEndorsementTwo.class).writeValueAsString(objectFilter);
答案 1 :(得分:0)
使用Mixins:http://wiki.fasterxml.com/JacksonMixInAnnotations
定义混合类(或接口)的注释 它将与目标类(或接口)一起使用,以便它出现 好像目标类具有混合类具有的所有注释(用于配置序列化/反序列化)