天天看點

【SpringBoot】實作統一RESTful傳回格式的方法

在RESTful設計風格中,為了保障前後端的資料互動的順暢,建議規範資料的傳回,并采用固定的資料格式封裝。

本文将介紹在SpringBoot中如何将統一化傳回格式部分的代碼進行封裝以簡化controller函數對傳回格式的處理。

總覽

建立

/src/main/java/com.../result

目錄,建立三個類:ExceptionMsg, Response,ResponseData。如下圖所示:

【SpringBoot】實作統一RESTful傳回格式的方法

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發送請求後可以得到如下結果:

【SpringBoot】實作統一RESTful傳回格式的方法

可以看到查詢的結果資料被統一的格式封裝了起來。

繼續閱讀