fastjson JSONCreator 的优先级大于非公开构造器

lsmepo6l  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(141)

定义了工厂方法并标识了 @JSONCreator ,但是发现其优先级弱于任何一个无参数构造器(包括 protectedprivate )。看代码似乎很早就是这样界定了,不知道是有什么特殊的考虑?

或者换个思路,如果想要自定义对象的工厂方法,怎么做比较好?(利用工厂对这个对象的 setter 和 getter 做一些扩展)。

vecaoik1

vecaoik11#

同问,还有,当传入一个空json对象,看代码直接返回null,没有进入JSONCreator注解的构造方法中,没法校验。

l3zydbqr

l3zydbqr2#

是的,这个有什么问题?

zbq4xfa0

zbq4xfa03#

如果想要自定义对象的工厂方法,怎么做比较好?(利用工厂对这个对象的 setter 和 getter 做一些扩展)。

如下代码, @JSONCreator 是走不进去的。

public class A {
  private int a;
  public void setA(int a) {this.a = a;}
  public int getA() {return a;}
  @JSONCreator
  public static A create(int a) {
    A a1 = createFromSomeFactory(); // 比如对象池,或者通过工厂返回的东西修改一下 getter 和 setter 的逻辑
    a1.setA(a);
    return a1;
  }
}

看了下实现 https://github.com/alibaba/fastjson/blob/1.1.52.android/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java#L194 ,似乎是一定需要准备一个非默认构造器,然后才有可能走到这个 @JSONCreator 标注的方法。

相关问题