spring-boot-route(四)全局异常处理
2020/10/5 5:03:44
本文主要是介绍spring-boot-route(四)全局异常处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在开发中,我们经常会使用try/catch块
来捕获异常进行处理,如果有些代码中忘记捕获异常或者不可见的一些异常出现,就会响应给前端一些不友好的提示,这时候我们可以使用全局异常处理。这样就不用在代码中写那些烦人的try/catch块了
,代码的可读性也会提高。
SpringBoot提供的的注解@ControllerAdvice
表示开启全局异常捕获,在自定义的异常方法上使用ExceptionHandler
来进行统一处理。
下面一起看看如何优雅的处理全局异常!
一 定义响应状态码及信息的枚举类
@Getter public enum CodeEnum { SUCCESS(0,"请求成功"), ERROR(500,"未知异常"), ERROR_EMPTY_RESULT(1001,"查询结果为空"), ERROR_INCOMPLETE_RESULT(1002,"请求参数不全"); private int code; private String message; CodeEnum(int code,String message){ this.code = code; this.message = message; } }
二 定义响应数据的实体类
@Slf4j @Data public class R<T> implements Serializable { private static final long serialVersionUID = 572235155491705152L; /** * 响应的状态码 */ private int code; /*** * 响应的信息 */ private String message; /** * 响应数据 */ private T data; /** * 放入响应码并返回 * @param code * @param msg * @return */ public R fillCode(int code,String msg){ this.code = code; this.message = msg; return this; } /** * 放入响应码并返回 * @param codeEnum * @return */ public R fillCode(CodeEnum codeEnum){ this.code = codeEnum.getCode(); this.message = codeEnum.getMessage(); return this; } /** * 放入数据并响应成功状态 * @param data * @return */ public R fillData(T data){ this.code = CodeEnum.SUCCESS.getCode(); this.message = CodeEnum.SUCCESS.getMessage(); this.data = data; return this; } }
三 自定义两个异常
根据业务需求自定义异常,在本文中我定义了两个异常,分别用作响应结果为空时处理和请求参数错误时处理。
@Data public class EmptyResutlException extends RuntimeException { private static final long serialVersionUID = -8839210969758687047L; private int code; private String message; public EmptyResutlException(CodeEnum codeEnum){ this.code = codeEnum.getCode(); this.message = codeEnum.getMessage(); } }
@Data public class RequestParamException extends RuntimeException { private static final long serialVersionUID = 4748844811214637041L; private int code; private String message; public RequestParamException(CodeEnum codeEnum){ this.code = codeEnum.getCode(); this.message = codeEnum.getMessage(); } }
四 定义全局异常处理类
由于这里我想要响应的结果为实体类对象,因此我直接用@RestControllerAdvice
来代替了@ControllerAdvice
,这两个注解的差别跟@Controller
和@RestController
一样,rest的响应体为json格式的数据。
@RestControllerAdvice @Slf4j public class GlobalExceptionHandler { /** * 查询结果为空时处理 * @param e * @return */ @ExceptionHandler(EmptyResutlException.class) public R emptyResultExceptionHandler(EmptyResutlException e){ log.error("查询结果为空:{}",e.getMessage()); R result = new R(); result.fillCode(e.getCode(),e.getMessage()); return result; } /** * 请求参数错误时处理 * @param e * @return */ @ExceptionHandler(RequestParamException.class) public R requestParamExceptionHandler(RequestParamException e){ log.error("请求参数不合法:{}",e.getMessage()); R result = new R(); result.fillCode(e.getCode(),e.getMessage()); return result; } /** * 处理其他异常 * @param e * @return */ @ExceptionHandler(Exception.class) public R exceptionHandler(Exception e){ log.error("未知异常:{}",e.getMessage()); R result = new R(); result.fillCode(CodeEnum.ERROR); return result; } }
五 自定义接口测试异常
@RestController public class TestController { @GetMapping("getString") public R getString(String name){ if(StringUtils.isEmpty(name)){ throw new RequestParamException(1002,"请求参数name为空"); }else if ("Java旅途".equals(name)) { // 这里没有查询操作,当请求参数是Java旅途的时候,模拟成查询结果为空 throw new EmptyResutlException(1001,"查询结果为空"); } // 这里模拟一下除自定义异常外的其他两种异常 int i = 0; i = 5/i; return new R().fillData(name); } }
在实际开发中可以自定义响应状态码的枚举类和自定义异常以满足需求。
此是spring-boot-route系列的第四篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。本文已收录至我的github,欢迎各位小伙伴star
!
github:https://github.com/binzh303/s...
点关注、不迷路
如果觉得文章不错,欢迎关注、点赞、收藏,你们的支持是我创作的动力,感谢大家。
如果文章写的有问题,请不要吝啬,欢迎留言指出,我会及时核查修改。
如果你还想更加深入的了解我,可以微信搜索「Java旅途」进行关注。回复「1024」即可获得学习视频及精美电子书。每天7:30准时推送技术文章,让你的上班路不在孤独,而且每月还有送书活动,助你提升硬实力!
这篇关于spring-boot-route(四)全局异常处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求