注意点1: 低版本中,如果JavaBean中没有默认构造函数(显式或默认),运行时将直接抛出 “default constructor not found” 的异常信息,如下:
测试时使用版本信息:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.21</version>
</dependency>
注意点2: 高版本中,反序列化时JSON会首先尝试调用默认构造函数,如果没有默认构造函数,则会寻找相匹配的有参构造函数。如果已经存在有参构造函数,但并没有提供默认构造函数时,某些场景下会出现反序列化的对象的属性值为空的情况,如下图所示。因此建议,JavaBean存在有参构造函数时,都显式提供默认构造函数。 GitHub上也有人提出了相同的问题,详见这里。
public class SubmitResultBO{
Long id;
String tips;
public SubmitResultBO(Long id){
this.id = id;
}
public SubmitResultBO(String tips){
this.tips = tips;
}
// public SubmitResultBO(){
//
// }
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTips() {
return tips;
}
public void setTips(String tips) {
this.tips = tips;
}
@Override
public String toString() {
return "SubmitResultBO{" +
"id=" + id +
", tips='" + tips + '\'' +
'}';
}
public static void main(String [] args){
SubmitResultBO obj = new SubmitResultBO("test");
String content = JSON.toJSONString(obj);
SubmitResultBO tt = JSON.parseObject(content, SubmitResultBO.class);
System.out.println(tt.getTips());
}
}
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
参考:
- Fastjson地址:https://github.com/alibaba/fastjson/wiki;