首頁  >  文章  >  Java  >  Java SSM整合開發統一結果封裝實例分析

Java SSM整合開發統一結果封裝實例分析

PHPz
PHPz轉載
2023-05-03 17:07:151511瀏覽

表現層與前端資料傳輸協定定義

SSM整合以及功能模組開發完成後,接下來,我們在上述案例的基礎上分析下有哪些問題需要我們去解決下。首先第一個問題是:

在Controller層增刪改回給前端的是boolean類型資料

Java SSM整合開發統一結果封裝實例分析

在Controller層查詢單一傳回前端的是物件

Java SSM整合開發統一結果封裝實例分析

在Controller層查詢所有回前端的是集合物件

Java SSM整合開發統一結果封裝實例分析

##目前我們就已經有三種資料類型傳回前端,如果隨著業務的成長,我們需要傳回的資料類型會越來越多。對於前端開發人員在解析資料的時候就比較凌亂了,所以對於前端來說,如果後台能夠回傳一個統一的資料結果,前端在解析的時候就可以用一種方式進行解析。開發就會變得更加簡單。

所以我們就想能不能將傳回結果的資料進行統一,具體如何來做,大體的思路為:

  • 為了封裝傳回的結果資料:創建結果模型類,封裝資料到data屬性中

  • 為了封裝傳回的資料是何種操作及是否操作成功:封裝操作結果到code屬性中

  • 操作失敗後為了封裝返回的錯誤訊息:封裝特殊訊息到message(msg)屬性中

Java SSM整合開發統一結果封裝實例分析

根據分析,我們可以設定統一資料回傳結果類別

public class Result{
	private Object data;
	private Integer code;
	private String msg;
}

注意:Result類別名稱及類別中的欄位並不是固定的,可以依需求自行增減提供若干個建構方法,方便操作。

表現層與前端資料傳輸協定實作

結果封裝

對於結果封裝,我們應該是在表現層處理,所以我們把結果類別放在controller包下,當然你也可以放在domain包,這個都是可以的,具體如何實現結果封裝,具體的步驟為:

步驟1:創建Result類別

public class Result {
    //描述统一格式中的数据
    private Object data;
    //描述统一格式中的编码,用于区分操作,可以简化配置0或1表示成功失败
    private Integer code;
    //描述统一格式中的消息,可选属性
    private String msg;
    public Result() {
    }
    //构造方法是方便对象的创建
    public Result(Integer code,Object data) {
        this.data = data;
        this.code = code;
    }
    //构造方法是方便对象的创建
    public Result(Integer code, Object data, String msg) {
        this.data = data;
        this.code = code;
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    @Override
    public String toString() {
        return "Result{" +
                "data=" + data +
                ", code=" + code +
                ", msg='" + msg + '\'' +
                '}';
    }
}

注意:

可以不寫toString方法,他最後會被轉為json格式。但是getter和setter方法是一定要有的!

步驟2:定義回傳碼Code類別

//状态码
public class Code {
    public static final Integer SAVE_OK = 20011;
    public static final Integer DELETE_OK = 20021;
    public static final Integer UPDATE_OK = 20031;
    public static final Integer GET_OK = 20041;
    public static final Integer SAVE_ERR = 20010;
    public static final Integer DELETE_ERR = 20020;
    public static final Integer UPDATE_ERR = 20030;
    public static final Integer GET_ERR = 20040;
}

注意:code類別中的常數設計也不是固定的,可以根據需要自行增減,例如將查詢再進行細分為GET_OK ,GET_ALL_OK,GET_PAGE_OK等。

步驟3:修改Controller類別的回傳值

//统一每一个控制器方法返回值
@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;
    @PostMapping
    public Result save(@RequestBody Book book) {
        boolean flag = bookService.save(book);
        return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERR,flag);
    }
    @PutMapping
    public Result update(@RequestBody Book book) {
        boolean flag = bookService.update(book);
        return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);
    }
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        boolean flag = bookService.delete(id);
        return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);
    }
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        Book book = bookService.getById(id);
        Integer code = book != null ? Code.GET_OK : Code.GET_ERR;
        String msg = book != null ? "" : "数据查询失败,请重试!";
        return new Result(code,book,msg);
    }
    @GetMapping
    public Result getAll() {
        List<Book> bookList = bookService.getAll();
        Integer code = bookList != null ? Code.GET_OK : Code.GET_ERR;
        String msg = bookList != null ? "" : "数据查询失败,请重试!";
        return new Result(code,bookList,msg);
    }
}

這裡拿bookList和null比較是因為,如果查詢全部沒有查到結果,那麼就會直接回傳一個null,而不是傳回空列表!

在根據id查book的時候,如果沒有查到也是回傳一個null

最後我們的專案結構:

Java SSM整合開發統一結果封裝實例分析

步驟4:啟動服務測試

Java SSM整合開發統一結果封裝實例分析

我們的回傳結果就已經能以一種統一的格式傳回給前端。前端根據傳回的結果,先從中取得

code,根據code判斷,如果成功則取data屬性的值,如果失敗,則取msg中的值做提示。

以上是Java SSM整合開發統一結果封裝實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除