问题代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentDao {
private Integer id;
private String name;
private Integer age = 20;
public static void main(String[] args) {
String data = "{\"name\":\"张学友\"}";
StudentDao studentDao = JSON.parseObject(data, StudentDao.class);
if (studentDao != null) {
int id = studentDao.getId();
System.out.println("id是:" + id);
}
System.out.println(studentDao);
}
在执行代码时,直接报出空指针异常,从代码中能看出,在获取字段属性之前就已经判断studentDao对象不为null,那么问题难道出现在getId()中?
没错,可以发现 id 属性的类型是包装类 Integer,当 StudentDao 对象从 JSON 字符串中解析出来时,如果 JSON 字符串中没有包含 “id” 字段,那么 getId() 方法将返回 null,此时代码返回类型误写成 int 基本数据类型,会抛出 NullPointerException。
解决办法
我们只需将 int 类型更换成id属性对应的 Integer 包装类型
同时也在提醒我们写代码时,获取变量时尽量使用快捷键(Ctrl+Alt+v)来生成声明类型,避免上面出现的错误。