表现层数据封装
前端接收数据格式
前后端数据不统一:前后端通信协议,将数据做成统一格式反馈给前端页面。
- 创建结果模型类,
- 封装数据到data属性中。
- 封装操作结果到code属性中。(例如:增、删、改返回true或者1结尾成功、0结尾失败)。
- 封装特殊消息到message 属性(msg)中。
结果模型类,
package com.jie.controller;
/**
* @Author 小杰
* @Date 2022/5/2 10:44
* @Version 1.0
* 前后端数据模型
*/
public class Result {
private Object data;
private Integer code;
private String msg;
public Result() {
}
public Result(Object data, Integer code) {
this.data = data;
this.code = code;
}
public Result(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Result(Object data, String msg) {
this.data = data;
this.msg = msg;
}
public Result(Object data, Integer code, 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;
}
}
存放所有code
package com.jie.controller;
/**
* @Author 小杰
* @Date 2022/5/2 10:55
* @Version 1.0
* 存放返回给前端的所有code。
* 0结尾失败,1结尾成功。
*/
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等
修改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);
}
}
至此,我们的返回结果就已经能以一种统一的格式返回给前端。前端根据返回的结果,先从中获取
code
,根据code判断,如果成功则取data
属性的值,如果失败,则取msg
中的值做提示。