注意點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;