背景
今天在开发过程中, 使用 fastjson 解析一段 json 为对象时, 某个对象的属性一直没有被赋值.
复现
pojo 类
@Data
public class Paper {
private Integer id;
private String name;
public Paper(Integer id) {
this.id = id;
}
}
验证代码
/**
* 解析的对象务必要有无参构造方法
*
* 如果该类没有无参构造方法 , fastjson 就会选择里面的有参构造方法, 而那个有参构造方法的参数没有包含所有字段时, 会导致其他字段始终不会被赋值
*/
@Test
public void testNoArgsConstructor() {
// 可以看到 name 并不会被赋值
System.out.println(JsonUtils.parse("{\"id\":123,\"name\":\"wj\"}", Paper.class));
}
输出
原因
后来发现是因为该类没有无参构造方法 , fastjson 就会选择里面的有参构造方法, 而那个有参构造方法的参数没有包含所有字段, 导致其他字段始终不会被赋值
解决
为该解析类增加一个无参构造方法即可