SSM整合以及功能模組開發完成後,接下來,我們在上述案例的基礎上分析下有哪些問題需要我們去解決下。首先第一個問題是:
在Controller層增刪改回給前端的是boolean類型資料
在Controller層查詢單一傳回前端的是物件
在Controller層查詢所有回前端的是集合物件
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最後我們的專案結構:
code,根據code判斷,如果成功則取
data屬性的值,如果失敗,則取
msg中的值做提示。
以上是Java SSM整合開發統一結果封裝實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!