【发布时间】:2012-03-12 00:44:47
【问题描述】:
是否可以有选择地确定在运行时何时使用@JsonFilter 注解?
当我不提供过滤器时,我会收到 JsonMappingException 异常(见下文)。
背景:
我从recent StackOverflow post 中了解到,我可以使用@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)
【问题讨论】: