背景分析在基于C/S架构的编程模型中,客户端往往需要根据状态对服务端返回的数据进行不同的处理。例如,正确的状态数据以一种方式呈现,不正确的状态数据以另一种方式呈现。于是服务端响应数据的标准化设计应运而生。响应标准设计响应数据标准化设计时,首先要分析响应数据,哪些数据应该响应给客户端,这些数据应该进行什么样的状态设计。如果当前响应的业务数据包含状态、消息、具体数据三部分。我们可以这样设计,比如:packagecom.cy.pj.common.pojo;/***基于这个对象,封装服务端响应客户端的数据*/publicclassResponseResult{/**Responsestatuscode(有人用code)*/privateIntegerstate=1;//1表示ok,0表示error,.../**状态码对应的信息*/privateStringmessage="ok";/**正确的响应数据*/privateObjectdata;publicResponseResult(){}publicResponseResult(Stringmessage){//newResponseResult("deleteok"),this.message=message;}publicResponseResult(Objectdata){//newResponseResult(list);这个.data=数据;}publicResponseResult(Throwablee){//newResponseResult(e);这个.state=0;this.message=e.getMessage();}publicIntegergetState(){返回状态;}publicvoidsetState(Integerstate){this.state=state;}publicStringgetMessage(){返回消息;}publicvoidsetMessage(Stringmessage){this.message=message;}publicObjectgetData(){返回数据;}公共无效setData(对象数据){this.data=data;}}响应数据的封装在Controller类的逻辑方法中进行,用于正常的响应数据封装,例如:packagecom.cy.pj.module.controller;importcom.cy。pj.common.pojo.ResponseResult;导入org.springframework.web.bind.annotation.PathVariable;导入org.springframework.web.bind.annotation.RequestMapping;导入org.springframework.web.bind.annotation.RestController;@RestControllerpublic类ArithmeticController{@RequestMapping("/doCompute/{n1}/{n2}")publicResponseResultdoCompute(@PathVariableIntegern1,@PathVariableIntegern2){整数结果=n1/n2;ResponseResultr=newResponseResult("计算结果:"+result);r.setData(结果);返回r;}}将异常响应数据封装在全局异常处理对象中,例如:packagecom.cy.pj.common.web;importcom.cy.pj。common.pojo.ResponseResult;导入org.slf4j.Logger;导入org.slf4j.LoggerFactory;@RestControllerAdvice公共类GlobalExceptionHandler{privatestaticfinalLoggerlog=LoggerFactory.getLogger(GlobalExceptionHandler.class);//2@ExceptionHandler(ArithmeticException.class)publicResponseResultdoHandleArithmeticException(ArithmeticExceptione){e.printStackTrace();log.info("异常{}",e.getMessage());returnnewResponseResult(e);//封装异常结果}}总结(Summary)本节主要讲解SpringBoot项目中如何规范对逻辑数据的响应,为什么要这样设计,这样设计的好处和如何通过本节的学习来提高设计响应规范维度的设计理念,掌握基本技能。
