一、异常场景复现
1、maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
2、java
2-1、TestVo
@Data
public class TestVo {
private Long id;
private String name;
private int age;
private List<String> hobbyList;
public TestVo (Long id){
this.id = id;
}
}
2-2、TestTemp
@SpringBootTest
public class TestTemp {
@Test
void contextLoads() {
String jsonStr = "{\n" +
"\t\"name\": \"张三\",\n" +
"\t\"hobbyList\": [\"篮球\", \"书法\", \"钓鱼\"],\n" +
"\t\"id\": 1,\n" +
"\t\"age\": 24\n" +
"}";
TestVo testVo = JSON.parseObject(jsonStr, TestVo.class);
System.out.println(testVo);
}
}
3、触发
直接跑单元测试即可,得到转换后的对象为:
TestVo(id=1, name=null, age=0, hobbyList=null)
可见,除了id=1为构造器注入外,其余属性均为null或字段类型默认值。
二、问题解决
这是由于对象类TsetVo的无参构造器被覆盖所致,可以新增无参构造,或加上**@NoArgsConstructor**。
重新执行单测,输出为:
TestVo(id=1, name=张三, age=24, hobbyList=[篮球, 书法, 钓鱼])
问题解决。