fastjson 父类set方法返回了自身类型时,子类set方法上的JSONField注解无法生效

3lxsmp7m  于 2022-10-27  发布在  其他
关注(0)|答案(2)|浏览(174)

例子

class A {
      private String id;

      public A setId(String id) { 
          this.id = id; 
      }
}

class B extends A {

      @JSONField(name = "notId")
      @Override      
      public A setId(String id) { 
          this.id = id; 
      }
}

此时反序列化B类示例时,该字段是无法正确设值的

大致看了下源码,应该位于com.alibaba.fastjson.util.JavaBeanInfo类中

for (Method method : methods) { //
            int ordinal = 0, serialzeFeatures = 0, parserFeatures = 0;
            String methodName = method.getName();

            if (Modifier.isStatic(method.getModifiers())) {
                continue;
            }

            // support builder set
            Class<?> returnType = method.getReturnType();
            //此处方法返回类型应用Class.isAssignableFrom方法判断,否则子类无法覆盖字段名称
            if (!(returnType.equals(Void.TYPE) || returnType.equals(method.getDeclaringClass()))) {
                continue;
            }

相关问题