在基於C/S架構的編程模型中,客戶端每每須要對服務端返回的數據,基於狀態的不一樣進行不一樣的處理。例如,正確的狀態數據一種呈現方式,錯誤的狀態數據是另一種呈現方式。因而服務端響應數據的標準化設計油然而生。web
在響應數據標準化設計時,首先要對響應數據進行分析,哪些數據要響應到客戶端,對這些數據進行怎樣的狀態設計等。假如如今響應的業務數據包含三部分:狀態,消息,具體數據。咱們能夠這樣設計,例如:spring
package com.cy.pj.common.pojo; /** * 基於此對象封裝服務端響應到客戶端的數據 */ public class ResponseResult { /**響應狀態碼(有的人用code)*/ private Integer state=1;//1表示ok,0表示error,..... /**狀態碼對應的信息*/ private String message="ok"; /**正確的響應數據*/ private Object data; public ResponseResult(){} public ResponseResult(String message){//new ResponseResult("delete ok"), this.message=message; } public ResponseResult(Object data){//new ResponseResult(list); this.data=data; } public ResponseResult(Throwable e){//new ResponseResult(e); this.state=0; this.message=e.getMessage(); } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
在Controller類的邏輯方法中進行正常的響應數據封裝,例如:編程
package com.cy.pj.module.controller; import com.cy.pj.common.pojo.ResponseResult; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ArithmeticController { @RequestMapping("/doCompute/{n1}/{n2}") public ResponseResult doCompute(@PathVariable Integer n1, @PathVariable Integer n2){ Integer result=n1/n2; ResponseResult r=new ResponseResult("計算結果:"+result); r.setData(result); return r; } }
在全局異常處理對象中進行異常響應數據的封裝,例如:架構
package com.cy.pj.common.web; import com.cy.pj.common.pojo.ResponseResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestControllerAdvice public class GlobalExceptionHandler { private static final Logger log= LoggerFactory.getLogger(GlobalExceptionHandler.class);//2 @ExceptionHandler(ArithmeticException.class) public ResponseResult doHandleArithmeticException(ArithmeticException e){ e.printStackTrace(); log.info("exception {}",e.getMessage()); return new ResponseResult(e);//封裝異常結果 } }
本小節主要講解了Spring Boot工程中對邏輯數據的響應如何進行標準化設計,爲何這樣設計,這樣設計的好處以及如何設計。經過對這一小節的學習要提升其響應規範維度的設計理念,掌握基本技能。app