没有@JsonFilter Annotation的Jackson JSON过滤器

时间:2014-12-16 18:43:50

标签: java json jackson

我正在尝试使用Jackson库过滤API端点的响应。

我可以使用@JsonFilter(“[filterNameHere]”),但最终会有一个类,希望每次都能应用过滤器。

我是否可以仅在一个特定实例上过滤响应?

Pizza pizza = pizzaService.getPizzaById(pizzaId);

ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("baseFilter", SimpleBeanPropertyFilter.serializeAllExcept("base"));

String json = mapper.writer(filters).writeValueAsString(pizza);

return Response.status(200).entity(json).build();

我试过环顾四周但却找不到合适的东西。

1 个答案:

答案 0 :(得分:5)

不幸的是,filter id和class之间的关联是静态的,所以任何类都有或没有;也就是说,有时候你不能有过滤器,有时则没有。

然而,应该可以:

  • 表示要使用的“默认”过滤器(带SimpleFilterProvider.setDefaultFilter()),以便在没有明确注册的过滤器与id匹配的情况下使用。这个过滤器基本上可以是“包括所有”过滤器,这对处理没有影响。
  • 表示如果未找到过滤器ID匹配,则不会进行过滤:SimpleFilterProvider.setFailOnUnknownId(false)(在提供者实例上)

所以我认为你真正想做的是第二种选择,例如:

SimpleFilterProvider filters = new SimpleFilterProvider();
filters.setFailOnUnknownId(false);
String json = mapper.writer(filters).writeValueAsString(pizza);