今天在码代码时报错:
Cannot construct instance of org.tech.arthur.model.domain.DataTestDTO
(no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
网上搜索过后发现是于DTO中未写无参构造方法。
那么为什么一定要写无参构造方法呢?
无参构造函数,主要用于在子类创建对象时使用,java程序在执行子类的构造方法之前,会去调用父类构造方法,可以显示的指定super()某一个父类构造函数,如未显示指定 super(),系统会自动调用父类中没有参数的构造方法。
若既没有指定super()又没有无参构造函数,程序执行时会报错。
所以解决方法有两个:一是加上无参构造函数。二是在写好的构造函数中加上super()。
于是我按照要求加上无参构造函数,执行代码,果然可以了。
于是我又试了一下在有参构造函数加上super()
结果竟然报错了,不是说两个都可以吗,为什么会报错?
原来是我用java对象来接收json字符串,要求必须要有无参构造函数,而若已有有参构造函数,就不会自动创建无参构造函数,需要自己新建一个。