使用Fastjson生成Json少字段属性(数据丢失)
实体对象(get set 编辑器自动生成的 仔细观察特殊字段)
public class Person {
private String userName;
private String age;
private String cId;
private String mId;
public Person() {
}
public Person(String userName, String age, String cId, String mId) {
this.userName = userName;
this.age = age;
this.cId = cId;
this.mId = mId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getcId() {
return cId;
}
public void setcId(String cId) {
this.cId = cId;
}
public String getmId() {
return mId;
}
public void setmId(String mId) {
this.mId = mId;
}
@Override
public String toString() {
return "Person{" +
"userName='" + userName + '\'' +
", age='" + age + '\'' +
", cId='" + cId + '\'' +
", mId='" + mId + '\'' +
'}';
}
}
public static void main(String[] args) {
//cId mId get set 自动生成出错,导致JSON转换字段丢失
Person person=new Person("zhuangsan","13","asd","zxc");
String s = JSON.toJSONString(person);
System.out.println(s);//字段缺失
String ss="{\"age\":\"13\",\"userName\":\"zhuangsan\",\"cId\":\"123\",\"mId\":\"asd\"}";
Person person1 = JSONObject.parseObject(ss, Person.class);
System.out.println(person1);
}
运行结果:仔细发现cId、mId字段数据已丢失
{"age":"13","userName":"zhuangsan"}
Person{userName='zhuangsan', age='13', cId='null', mId='null'}
原因:Person get Set编辑器自动生成 ,cId、mId生成get,set 首字母小写,Fastjson是通过get set来进行赋值转换,Fastjson会判断该字段有没有对应的get方法是区分了大小写的,因为找不到相应属性无法赋值当然数据就丢失了
解决办法 类似与xXxx,单个字符加上大写字符,编辑器生成get set方法是有问题的,需要手动编写