如果我需要忽略一个字段的序列化/反序列化,我将@JsonIgnore
放在该字段上:
@JsonIgnore
private String name;
但是,如果我只需要序列化或仅在deserealization中我放入getter或setter方法。
但是可以在某种方法中使用吗?如果我的用户致电:
http://myApp/public/user/1
我需要忽略属性传递,例如,但如果我的用户调用:
http://myApp/private/user/1
我不需要忽略属性传递
有可能吗?
答案 0 :(得分:1)
您可以使用带有FilterProvider
@JsonFilter
注释为您的POJO指定过滤器名称。SimpleBeanPropertyFilter
的实例附加到过滤器名称。该类有两种基于属性名称的过滤器工厂方法。以下是注释声明的示例:
@JsonFilter("filterByName")
public class So {
public String alwaysWrite = "alwaysWriteValue";
public String somtimeIgnore = "somtimeIgnoreValue";
}
这是一个方法,它指定一个忽略somtimeIgnore
属性
public void dontWriteSomtimes(So so) {
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider()
.addFilter("filterByName", SimpleBeanPropertyFilter.serializeAllExcept("somtimeIgnore"));
ObjectWriter writer = mapper.writer(filters);
try {
System.out.println(writer.writeValueAsString(so));
} catch (Exception e) {
e.printStackTrace();
}
}
输出:
{"alwaysWrite":"alwaysWriteValue"}
这是一个写一切的方法:只分配一个不存在的或空的属性:
public void writeEveryting(So so) {
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider()
.addFilter("filterByName", SimpleBeanPropertyFilter.serializeAllExcept(""));
ObjectWriter writer = mapper.writer(filters);
try {
System.out.println(writer.writeValueAsString(so));
} catch (Exception e) {
e.printStackTrace();
}
}
输出:
{"alwaysWrite":"alwaysWriteValue","somtimeIgnore":"somtimeIgnoreValue"}