Spring MVC 資料返回問題記錄
阿新 • • 發佈:2020-08-16
Spring MVC 資料返回問題記錄
1. 返回值解析異常——“No converter found…”
-
異常資訊:
Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class com.example.demo.entity.Student]
-
過程回顧:
有一Student類,程式碼如下:
/** * @author xzy * @date 2020-08-16 16:02 * 說明: */ public class Student { private String id; private String studentName; private String studentNo; public Student() { } public Student(String id, String studentName, String studentNo) { this.id = id; this.studentName = studentName; this.studentNo = studentNo; } }
Controller類相關程式碼如下:
@GetMapping("getStudent") public Student getStudent() { return new Student("sd8f9sd89f", "李白", "A10001"); }
-
問題分析:
將某一物件作為返回值是,框架需要呼叫物件中的
get
方法,將物件解析成JSON格式。由於上述程式碼中的student類沒有定義任何get
方法,因此資料解析失敗。 -
解決辦法:
為相關欄位新增
get
方法修改後的student類:
/** * @author xzy * @date 2020-08-16 16:02 * 說明: */ public class Student { private String id; private String studentName; private String studentNo; public String getId() { return id;} public String getStudentName() { return studentName;} public String getStudentNo() { return studentNo;} public Student() {} public Student(String id, String studentName, String studentNo) { this.id = id; this.studentName = studentName; this.studentNo = studentNo; } }
呼叫介面,接收到的資料如下:
{ "id": "sd8f9sd89f", "studentName": "李白", "studentNo": "A10001" }
2. 返回值解析異常——欄位缺失
-
問題重現:
修改上文的Student類,原始碼如下:
public class Student { private String id; private String studentName; private String studentNo; public String getId() { return id;} public String getStudentName() { return studentName;} // 注意:此處沒有為studentNo屬性設定對應的get方法 public Student() {} public Student(String id, String studentName, String studentNo) { this.id = id; this.studentName = studentName; this.studentNo = studentNo; } }
呼叫介面,接收到的資料如下:
{ "id": "sd8f9sd89f", "studentName": "李白" }
從接收到的資料看,studentNo屬性的值並沒有被後端傳送出來。
-
問題分析:
將某一物件作為返回值是,框架會逐個呼叫物件中的
get
方法,將物件解析成JSON格式。由於上述程式碼的student類中沒有為studentNo屬性設定對應的get
方法,因此,框架沒有將studentNo屬性的值解析到返回值中。 -
解決辦法:
為需要的欄位新增
get
方法。