【发布时间】:2014-12-17 23:54:36
【问题描述】:
我正在尝试实现一种将给定对象序列化为 JSON 的通用方法,但仅限于在集合中传递的那些属性。如果可能的话,我想在不指定 @JsonFilter 的情况下获得此功能。为此,我尝试使用 Jackson 2.4.1 中的 FilterExceptFilter。依赖:
这是我目前拥有的:
public static String serializeOnlyGivenFields(Object o,
Collection<String> fields) throws JsonProcessingException {
if ((fields == null) || fields.isEmpty()) return null;
Set<String> properties = new HashSet<String>(fields);
SimpleBeanPropertyFilter filter =
new SimpleBeanPropertyFilter.FilterExceptFilter(properties);
SimpleFilterProvider fProvider = new SimpleFilterProvider();
fProvider.addFilter("fieldFilter", filter);
fProvider.setDefaultFilter(filter);
ObjectMapper mapper = new ObjectMapper();
mapper.setFilters(fProvider);
String json = mapper.writeValueAsString(o);
return json;
}
但是,过滤器永远不会应用。它总是序列化所有属性。
Set<String> fields = new HashSet<String>(); fields.add("name");
String json = Serializer.serializeOnlyGivenFields(e, fields);
System.out.println(json);
{"name":"测试实体","description":"测试描述"}
我也尝试注册FilterProvider on the ObjectWriter,但结果相同:
String json = mapper.writer(fProvider).writeValueAsString(o);
我错过了什么?有没有一种很好的方法可以通过 Jackson 实现这一目标?
【问题讨论】:
标签: json serialization filter jackson