环境:JDK7,tomcat7
问题:bean对象使用了@Accessors(chain = true) 注解,
-
在调用BeanUtils.setProperty(t, field.getName(), objvalue);
-
由于链式调用重写了 set方法返回值为对象this,导致BeanUtils调用反射获取set方法时获取不到,最终没有对需要值的对象set进入值
-
但是实际测试和本地环境可以获取到值,而生产环境获取不到
网上找到拿不到值的原因
cglib中使用 Java rt.jar包中的java.beans.Introspector类,在java.beans.Introspector类520行:只获取返回值是void类型的setxxxx方法,而@Accessors(chain=true)下setter方法返回当前对象,这个显然会有问题。
if (argCount == 0) {
if (name.startsWith(GET_PREFIX)) {
// Simple getter
pd = new PropertyDescriptor(this.beanClass, name.substring(3), method, null);
} else if (resultType == boolean.class && name.startsWith(IS_PREFIX)) {
// Boolean getter