我正在尝试使用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();
我试过环顾四周但却找不到合适的东西。
答案 0 :(得分:5)
不幸的是,filter id和class之间的关联是静态的,所以任何类都有或没有;也就是说,有时候你不能有过滤器,有时则没有。
然而,应该可以:
SimpleFilterProvider.setDefaultFilter()
),以便在没有明确注册的过滤器与id匹配的情况下使用。这个过滤器基本上可以是“包括所有”过滤器,这对处理没有影响。SimpleFilterProvider.setFailOnUnknownId(false)
(在提供者实例上)所以我认为你真正想做的是第二种选择,例如:
SimpleFilterProvider filters = new SimpleFilterProvider();
filters.setFailOnUnknownId(false);
String json = mapper.writer(filters).writeValueAsString(pizza);