在运行时有没有可能有选择性地确定何时使用@JsonFilter注释?
如果我没有提供过滤器,就会出现JsonMappingException异常(请参见下文)。
背景:
我从最近的StackOverflow帖子中了解到,我可以使用@JsonFilter动态过滤序列化的bean属性。这很好用。在我的域类中添加@JsonFilter("apiFilter")
后,在我的jax-rs服务(使用CXF实现)中添加了这段代码后,我能够动态地过滤由我的RESTful API返回的属性:
// shortened for brevity
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
return mapper.filteredWriter(filters).writeValueAsString(user);
问题在于有不同的服务调用,我不想对所有调用应用过滤器。在这些情况下,我希望返回完整的域类而不过滤任何属性。当我尝试只返回域类时,我会得到以下异常:
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter'; no FilterProvider configured
at org.codehaus.jackson.map.ser.BeanSerializer.findFilter(BeanSerializer.java:252)
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFieldsFiltered(BeanSerializer.java:216)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:140)