Spring中的统一结果返回和统一异常处理

Spring中的统一结果返回和统一异常处理 文章目录统一结果返回统一异常处理统一结果返回在实际的 Web 后端开发中接口返回的数据格式通常是前端与后端约定的标准。统一返回功能就是指将所有接口的响应数据封装成一种固定的结构code状态码如 200 表示成功500 表示失败也可以自定义业务码message提示信息如“操作成功”、“用户名已存在”data实际返回的数据可以是对象、集合、分页结果等成功时有值失败时可能为 null通常定义一个泛型类 ResultT其中 T 表示实际数据的类型publicclassResultT{privateIntegercode;// 状态码privateStringmessage;// 提示信息privateTdata;// 具体数据// 构造器私有通过静态方法创建privateResult(){}publicstaticTResultTsuccess(Tdata){ResultTresultnewResult();result.setCode(200);result.setMessage(操作成功);result.setData(data);returnresult;}publicstaticTResultTsuccess(Stringmessage,Tdata){ResultTresultnewResult();result.setCode(200);result.setMessage(message);result.setData(data);returnresult;}publicstaticTResultTerror(Stringmessage){ResultTresultnewResult();result.setCode(500);result.setMessage(message);result.setData(null);returnresult;}publicstaticTResultTerror(Integercode,Stringmessage){ResultTresultnewResult();result.setCode(code);result.setMessage(message);result.setData(null);returnresult;}// getter / setter 省略...}在 Controller 中使用如下RestControllerRequestMapping(/user)publicclassUserController{AutowiredprivateUserServiceuserService;GetMapping(/{id})publicResultUsergetUser(PathVariableLongid){UseruseruserService.getById(id);if(usernull){returnResult.error(用户不存在);}returnResult.success(user);}PostMappingpublicResultStringaddUser(RequestBodyUseruser){userService.save(user);returnResult.success(添加成功,null);}}统一异常处理Spring Boot 中可以使用 ControllerAdvice ExceptionHandler 捕获所有未处理的异常并统一封装成 Result 返回避免在 Controller 中到处写 try-catch。RestControllerAdvicepublicclassGlobalExceptionHandler{ExceptionHandler(Exception.class)publicResultStringhandleException(Exceptione){// 实际开发中可以区分不同异常返回不同状态码returnResult.error(500,系统繁忙请稍后再试);}// 还可以处理自定义业务异常ExceptionHandler(BusinessException.class)publicResultStringhandleBusinessException(BusinessExceptione){returnResult.error(e.getCode(),e.getMessage());}}