当前位置: 首页 > 后端技术 > Java

1.spring系列优雅实现接口统一返回

时间:2023-04-01 15:43:08 Java

好处现在公司的发展基本上是前后台分离的模式,所以必须要有一个统一的数据格式。这样做有什么好处?可以提高前后端对接的效率(特别重要)代码更加优雅简洁。对于前后端Terminal维护更方便,更容易实现(直接上传代码)1.状态码这里我初步设置了两个异常状态码,更多的状态码可以根据自己的情况定义@GetterpublicenumResponseEnum{SUCCESS(0,"OK"),PARAMETER_ERROR(1,"参数异常"),SYSTEM_ERROR(500,"服务器异常,请联系管理员");ResponseEnum(整数代码,字符串消息){this.code=code;this.message=消息;}私有最终整数代码;privatefinalStringmessage;}2.统一返回类注意:这里最好使用泛型数据。如果使用object,那么swagger接口文档将无法显示对应的字段属性定义publicclassResponseModel{privateIntegercode;私人字符串消息;私有T数据;publicResponseModel(整数代码,字符串消息,T数据){this.code=code;this.message=消息;这个。数据=数据;}publicstaticResponseModelok(){returnok(null);}publicstaticResponseModelok(Tdata){returnnewResponseModel<>(ResponseEnum.SYSTEM_ERROR.getCode(),ResponseEnum.SYSTEM_ERROR.getMessage(),数据);}publicstaticResponseModelok(Tdata,Stringmessage){returnnewResponseModel<>(ResponseEnum.SYSTEM_ERROR.getCode(),message,data);}publicstaticResponseModelerror(IntegerstatusCode,Stringmessage){returnnewResponseModel<>(statusCode,message,null);}publicstaticResponseModelerror(Stringmessage){returnerror(ResponseEnum.SYSTEM_ERROR.getCode(),message);}publicstaticResponseModelerror(){returnerror(ResponseEnum.SYSTEM_ERROR.getCode(),ResponseEnum.SYSTEM_ERROR.getMessage());}}3.自定义异常这里没啥好说的,自定义异常继承RuntimeException,添加状态代码属性@GetterpublicclassBusinessExceptionextendsRuntimeException{privateIntegercode;publicBusinessException(整数代码,字符串消息){super(消息);这个。代码=代码;}公共业务sException(字符串消息){超级(消息);}}4。统一异常处理器@ControllerAdvice@ResponseBody@Slf4jpublicclassGlobalException{@ExceptionHandler(value=BusinessException.class)publicResponseModelBusinessExceptionError(BusinessExceptione){log.error("业务异常",e);if(e.getCode()!=null){返回ResponseModel.error(e.getCode(),e.getMessage());}returnResponseModel.error(e.getMessage());}@ExceptionHandler(value=Exception.class)publicResponseModelExceptionError(Exceptione){log.error("系统异常",e);返回ResponseModel.error();}}5。使用ifnot如果传回,这里也需要异常捕获,可以使用统一异常直接返回,也可以直接抛出自定义异常,处理统一异常//controller层@ResponseBody@PostMapping("/test")publicResponseModelsave()throwsException{//业务操作returnResponseModel.ok();}//servicepublicvoidsave(Stringname)throwsException{if(name==null){扔新的BusinessException(ResponseEnum.PARAMETER_ERROR.getCode(),ResponseEnum.PARAMETER_ERROR.getMessage());}}6.还有问题。当访问服务中不存在的接口404时,无法捕获。这个问题的朋友可以看我后面更新的文章进行处理。感谢阅读到最后的朋友。如有错误,请指正。本文由博客多发平台OpenWrite发布!