我有一个 spring beans 配置文件,其中我将以下 jackson 类定义为 spring beans。
由于某种原因,在运行时 filterProvider
bean 会在没有映射参数的情况下实例化。
从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>
更新:
从 Jackson 1.9.5 开始,此问题已修复(感谢 Tatu)
如有任何帮助,我们将不胜感激。
最佳答案
您似乎在 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>();
}
采用映射
的构造函数忽略它......(即javadoc不正确)
关于java - 为什么 spring 不使用我的构造函数来初始化这个 bean(Map 参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9062618/