在RESTful設計風格中,為了保障前後端的資料互動的順暢,建議規範資料的傳回,并采用固定的資料格式封裝。
本文将介紹在SpringBoot中如何将統一化傳回格式部分的代碼進行封裝以簡化controller函數對傳回格式的處理。
總覽
建立
/src/main/java/com.../result
目錄,建立三個類:ExceptionMsg, Response,ResponseData。如下圖所示:
ExceptionMsg 類
該類用以實作響應的枚舉
package com.example.studb.result;
// 實作響應的枚舉類
public enum ExceptionMsg {
SUCCESS(0, "success"),
FAILED(-1,"fail");
private ExceptionMsg(int code, String msg) {
this.code = code;
this.msg = msg;
}
private int code;
private String msg;
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
Response 類
該類用于實作傳回對象實體。
package com.example.studb.result;
// 實作傳回對象實體
public class Response {
/** 傳回資訊碼*/
private int rspCode = 0;
/** 傳回資訊内容*/
private String rspMsg = "success";
public Response() {
}
public Response(ExceptionMsg msg){
this.rspCode = msg.getCode();
this.rspMsg = msg.getMsg();
}
public Response(int rspCode) {
this.rspCode = rspCode;
this.rspMsg = "";
}
public Response(int rspCode, String rspMsg) {
this.rspCode = rspCode;
this.rspMsg = rspMsg;
}
public int getRspCode() {
return rspCode;
}
public void setRspCode(int rspCode) {
this.rspCode = rspCode;
}
public String getRspMsg() {
return rspMsg;
}
public void setRspMsg(String rspMsg) {
this.rspMsg = rspMsg;
}
@Override
public String toString() {
return "Response{" +
"rspCode='" + rspCode + '\'' +
", rspMsg='" + rspMsg + '\'' +
'}';
}
}
ResponseData 類
該類用于封裝傳回結果。
package com.example.studb.result;
// 封裝傳回結果
public class ResponseData extends Response {
private Object data;
public ResponseData(Object data) {
this.data = data;
}
public ResponseData(ExceptionMsg msg) {
super(msg);
}
public ResponseData(int rspCode, String rspMsg) {
super(rspCode, rspMsg);
}
public ResponseData(int rspCode, String rspMsg, Object data) {
super(rspCode, rspMsg);
this.data = data;
}
public ResponseData(ExceptionMsg msg, Object data) {
super(msg);
this.data = data;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
@Override
public String toString() {
return "ResponseData{" +
"data=" + data +
"} " + super.toString();
}
}
使用
假如我有一個controller的類:
CourseController
,用來查詢資料庫中所存儲的課程資訊,使用
courseMapper.queryAll()
即可得到結果,為了将結果發送出去,并包裝成統一的傳回格式,可以這樣做:
@RestController
@RequestMapping("/course")
public class CourseController {
@Autowired
private CourseMapper courseMapper;
@RequestMapping("/query")
public Object queryAll() {
return new ResponseData(ExceptionMsg.SUCCESS, courseMapper.queryAll());
}
}
也就是将需要發送的結果資料放入
ResponseData
構造器的第二個參數裡,将新建立的對象return出去。
效果
對該controller發送請求後可以得到如下結果:
可以看到查詢的結果資料被統一的格式封裝了起來。