记录⼀次使⽤fastjson把json字符串转为对象时属性缺失问题
记录⼀次使⽤fastjson把json字符串转为对象时属性缺失问题
  在⼀次使⽤fastJson把json字符串转为对象时,发现有个属性缺失,经多⽅百度才得问题原因,现将问题原因及解决步骤记录如下:⼀、问题现象
  问题复现步骤如下
1 使⽤到的POJO:
public class SysUser {
private String userName;
private String password;
private String job;
private String gender ="Unknown";
public SysUser(String userName, String password, String job){ this.userName = userName;
this.password = password;
this.job = job;
}
public String getUserName(){
return userName;
}
public void setUserName(String userName){
this.userName = userName;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public String getJob(){
return job;
}
public void setJob(String job){
this.job = job;
}
public String getGender(){
return gender;
}
public void setGender(String gender){
}
fastjson常用方法@Override
public String toString(){
return"SysUser{"+
"userName='"+ userName +'\''+
", password='"+ password +'\''+
", job='"+ job +'\''+
", gender='"+ gender +'\''+
'}';
}
}
2 复现步骤
public static void main(String[] args){
SysUser sysUser =new SysUser("⼤王","⼤王","王者");
sysUser.setGender("男");
String jsonString =JSONString(sysUser);
SysUser userObject =JSON.parseObject(jsonString, SysUser.class);
System.out.println(userObject);
}
  debug查看上述代码的执⾏结果如下图,由执⾏结果可看到,我给sysUser变量的字段gender赋值了"男",由sysUser转换成的jsonString中的字段gender值也是男,但是使⽤
JSON.parseObject(jsonString, SysUser.class);
  把字符串转为SysUser对象时,gender属性仍然为默认值“Unknown”,也就是说并没有把sonString中的字段值赋予SysUser对象的gender变量:
⼆、问题原因
  此问题困惑了我挺久,⽹查此问题⼤部分都是缺少字段的set⽅法或者属性名有问题导致的。由于根本原因的查未涉及源码追究,暂不表。
  直接说结论,结论就是,此pojo有四个属性,但是唯⼀的⼀个构造⽅法只包括了其中三个属性,导致另外⼀个属性在进⾏字符串转对象时,⽆法赋值(我⼀直以为只要有字段属性的get和set⽅法,fastJson转换时就会把值赋予给相应字段,原来并不是如此)。
三、解决办法
解决⽅法很简单,可⽤如下两个⽅式:
 1:增加全参数构造器
 2:增加⽆参构造器
四、源码追踪
暂略。。。。。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。