統一結果封裝

燕子去了發表於2024-03-27

1、Result

一般來說,增刪改返回boolean,查詢返回物件或集合,還有其他型別的返回資料,前段解析資料比較麻煩,需要返回一個統一的資料結果

統一資料返回結果類:

  1. data:封裝資料(各種型別的,例如boolean、null、json等)
  2. code:封裝操作型別與是否成功,可以使用列舉類
  3. msg:封裝特殊資訊(操作失敗返回的錯誤資訊等)
public class Result{
	private Object data;
	private Integer code;
	private String msg;
}

2、案例

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;
    }
	//setter...getter...省略
}

定義返回碼Code類:code類中的常量設計也不是固定的,可以根據需要自行增減,例如將查詢再進行細分為GET_OK,GET_ALL_OK,GET_PAGE_OK等。

//狀態碼
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,根據code判斷,如果成功則取data屬性的值,如果失敗,則取msg中的值做提示。

@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);
    }
}

相關文章