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

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

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

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

vecaoik1

vecaoik11#

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

l3zydbqr

l3zydbqr2#

是的,这个有什么问题?

zbq4xfa0

zbq4xfa03#

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

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

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

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

展开查看全部

相关问题