我有一个spring beans配置文件,我将以下jackson类定义为spring bean
出于某种原因,在运行时,filterProvider
bean在没有map参数的情况下被实例化
您可以在docs中看到SimpleFilterProvider
确实有这样的构造函数,SimpleBeanPropertyFilter
实现了BeanPropertyFilter
。
<bean id="productAttributesAndAdvertiserNameFilter" class="org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter" factory-method="filterOutAllExcept">
<constructor-arg value="name"/>
</bean>
<bean id="offerIdFilter" class="org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter" factory-method="filterOutAllExcept">
<constructor-arg value="id"/>
</bean>
<bean id="filterProvider" class="org.codehaus.jackson.map.ser.impl.SimpleFilterProvider">
<constructor-arg>
<util:map value-type="org.codehaus.jackson.map.ser.BeanPropertyFilter">
<entry key="onlyNameFilter" value-ref="productAttributesAndAdvertiserNameFilter" />
<entry key="onlyIdFilter" value-ref="offerIdFilter" />
</util:map>
</constructor-arg>
</bean>
更新
截至杰克逊1.9.5,这个问题已得到修复(感谢Tatu)
任何帮助都将不胜感激。
答案 0 :(得分:8)
您似乎在SimpleFilterProvider
中发现了一个错误。
我刚下载了最新的源代码(1.9.4),构造函数定义如下:
public SimpleFilterProvider() {
_filtersById = new HashMap<String,BeanPropertyFilter>();
}
/**
* @param mapping Mapping from id to filter; used as is, no copy is made.
*/
public SimpleFilterProvider(Map<String,BeanPropertyFilter> mapping) {
_filtersById = new HashMap<String,BeanPropertyFilter>();
}
使用mapping
的构造函数忽略它...(即javadoc不正确)
答案 1 :(得分:0)
我认为<util:map>
在这里放错了地方。我将它作为一个单独的bean,在过滤器提供程序声明之外,并引用它。或者我将其更改为<map>
而没有util
命名空间。
答案 2 :(得分:0)
我不明白为什么它不起作用。
最糟糕的是,您可以通过扩展SimpleFilterProvider
来创建自己的类,并在Spring上下文中声明这个bean ...