没有@JsonFilter Annotation的Jackson JSON过滤器

Mat*_*att 7 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();
Run Code Online (Sandbox Code Playgroud)

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

Sta*_*Man 5

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

但是,应该可以:

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

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

SimpleFilterProvider filters = new SimpleFilterProvider();
filters.setFailOnUnknownId(false);
String json = mapper.writer(filters).writeValueAsString(pizza);
Run Code Online (Sandbox Code Playgroud)

  • 此答案中显示了使用 MixIns 的不同解决方案:/sf/answers/3127125641/ (2认同)