本文转载自微信公众号《Java后端指南》,作者KING鹏哥。转载本文请联系java后台攻略公众号。我相信以全球统一的格式返回这个东西在每个项目中都是非常重要的。前端需要对前端有一个统一的格式,所以我们后端需要对前端的结构进行封装。1结构我目前接触的结构基本是这样的。{"code":"0","msg":"Requestisnormal","data":{}}2实现实体类的创建publicclassRextendsHashMap{privatestaticfinallongserialVersionUID=1L;/***Status代码*/publicstaticfinalStringCODE_TAG="code";/***返回内容*/publicstaticfinalStringMSG_TAG="msg";/***数据对象*/publicstaticfinalStringDATA_TAG="data";/***初始化一个新创建的AjaxResult对象,使其成为表示一条空消息。*/publicR(){}/***初始化一个新创建的AjaxResult对象**@paramcode状态码*@parammsg返回内容*/publicR(Stringcode,Stringmsg){super.put(CODE_TAG,code);super.put(MSG_TAG,msg);}/***初始化一个新创建的AjaxResult对象**@paramcode状态码*@parammsg返回内容*@paramdata数据对象*/publicR(Stringcode,Stringmsg,Objectdata){super.put(CODE_TAG,code);super.put(MSG_TAG,msg);if(null!=data){super.put(DATA_TAG,data);}}/***方便的链式调用**@paramkey*@paramvalue*@return*/@OverridepublicRput(Stringkey,Objectvalue){super.put(key,value);returnthis;}/***返回成功信息**@return成功信息*/publicstaticRsuccess(){returnR.success("操作成功");}/***返回成功数据**@返回成功信息*/publicstaticRsuccess(Objectdata){returnR.success("操作成功",data);}/***返回成功信息**@parammsg返回内容*@返回成功信息*/publicstaticRsuccess(Stringmsg){returnR.success(msg,null);}/***返回成功信息**@parammsg返回内容*@paramdatadata对象*@return成功信息*/publicstaticRsuccess(Stringmsg,Objectdata){returnnewR("0",msg,data);}/***返回错误信息**@return*/publicstaticRerror(){returnR.error("操作失败");}/***返回错误信息**@parammsg返回内容*@return警告信息*/publicstaticRerror(Stringmsg){returnR.error("-1",msg);}/***返回错误信息**@parammsg返回内容*@paramdata数据对象*@return警告信息*/publicstaticRerror(Stringmsg,Objectdata){returnnewR("-1",msg,data);}/***返回错误信息**@paramcode状态码*@parammsg返回内容*@return警告信息*/publicstaticRerror(Stringcode,Stringmsg){returnnewR(code,msg,null);}}3异常处理正常情况下的返回结构已经修复,我们还需要处理异常情况。首先,创建几个异常类,根据实际需要创建。/***基础异常*/@GetterpublicclassBaseExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=1L;/***所属模块*/privatefinalStringmodule;/***错误码*/privatefinalStringcode;/***错误码对应的参数*/privatefinalObject[]argsObject[];/***错误消息*/privatefinalStringmessage;publicBaseException(Stringmodule,Stringcode,Object[]args,Stringmessage){this.module=module;this.code=code;this.args=args;this.message=message;}publicBaseException(Stringmodule,Stringcode,Object[]args){this(module,code,args,null);}publicBaseException(Stringmodule,StringdefaultMessage){this(module,null,null,defaultMessage);}publicBaseException(Stringcode,Object[]args){this(null,code,args,null);}publicBaseException(Stringmodule,Stringcode,Stringmessage){this(null,code,null,message);}publicBaseException(Stringmessage){this(null,null,null,message);}publicStringgetCode(){returncode;}publicStringgetMsg(){returnmessage;}publicObject[]getArgs(){returnargs;}publicStringgetDefaultMessage(){returngetMessage();}}/***自定义异常*/publicclassCustomExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=1L;privateStringcode;privatefinalStringmessage;publicCustomException(Stringmessage){this.message=message;}publicCustomException(Stringmessage,Stringcode){this.message=message;this.code=code;}publicCustomException(Stringmessage,Throwablee){super(message,e);this.message=message;}@OverridepublicStringgetMessage(){returnmessage;}publicStringgetCode(){returncode;}}我就创建了两个异常类4创建全局异常拦截器@RestControllerAdvice@Slf4jpublicclassGlobalExceptionHandler{/***基本异常*/@ExceptionHandler(BaseException.class)publicRbaseException(BaseExceptione){returnR.error(e.getDefaultMessage());}/***业务异常*/@ExceptionHandler(CustomException.class)publicRbusinessException(CustomExceptione){if(StringUtils.isNotBlank(e.getCode())){returnR.error(e.getMessage());}returnR.error("-1",e.getMessage());}@ExceptionHandler(Exception.class)publicRhandleException(Exceptione){log.error(e.getMessage(),e);returnR.error(String.format("未知错误%s",e.getMessage()));}}其中,状态码我们可以单独定义一个类,这里??为了方便就不写了。5测试@RestControllerpublicclassTestAction{@RequestMapping("/test")publicRtest(){returnR.success("请求成功",null);}@RequestMapping("/test2")publicRtest2(){Studentstudent=newStudent();student.setName("king");student.setPassword("123456");returnR.success(student);}@RequestMapping("/test3")publicRtest3(){returnR.error("请求失败");}@RequestMapping("/test4")publicRtest4(){thrownewCustomException("failed");}@RequestMapping("/test5")publicRtest5()throwsException{thrownewException("failed");}}可以自己查,如果有问题是欢迎骚扰我。视频讲解:https://www.bilibili.com/video/BV1e341117av/