问题背景
在一次更改老项目中,因为想使用构造器方便点,就在原来的代码基础上增加了一个有参构造器,原来的代码是没有设置构造器的。(没有设置的话使用默认的一个无参构造器) 。 然后因为我新创建的有参构造器会覆盖原来的无参构造器。 导致原先的json转对象会出现转出来的对象为空问题。
大致代码如下:
示例代码
@Setter
@Getter
@AllArgsConstructor
@ToString
public class FastjsonTest {
private String id;
private String name;
public static void main(String[] args) {
String str = "{\"id\":\"1\",\"name\":\"名称\"}";
System.out.println(JSONObject.parseObject(str, FastjsonTest.class));
}
}
报错异常
Exception in thread "main" com.alibaba.fastjson.JSONException: default constructor not found.
当然真实情况肯定会比这个复杂,并且因为某个原因,这个提示原因也没有弄明显。 但总体的情况是这个样子的。
解决
报错异常很明显,没有发现默认构造器。 我们只需要增加一个默认的构造器就可以了
增加一个@NoArgsConstructor直接可以了。
修改后的代码
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class FastjsonTest {
private String id;
private String name;
public static void main(String[] args) {
String str = "{\"id\":\"1\",\"name\":\"名称\"}";
System.out.println(JSONObject.parseObject(str, FastjsonTest.class));
}
}
问题反思
下次在创建有参构造器的时候,最好优先创建一个无参构造器,然后再创建有参构造器,避免说在使用第三方包的时候出现问题。