
SpringBoot 添加全局异常统一处理代码
发布日期:2021-05-08 00:27:31
浏览次数:14
分类:精选文章
本文共 2805 字,大约阅读时间需要 9 分钟。
文章目录
本文需要结合 部分代码。可以提供一个自定义异常,使用已定义好的错误码枚举ResultCode
,用来在代码中对可预知的异常进行抛出处理。
package com.example.demo.exception;import com.example.demo.result.ResultCode;import lombok.Getter;/** * 自定义异常 * @auther wangbo * @date 2021-01-13 17:27 */@Getterpublic class CustomException extends RuntimeException{ private ResultCode resultCode; public CustomException(ResultCode resultCode){ super(resultCode.getMessage()); this.resultCode = resultCode; }}
接下来需要提供一个全局异常统一处理类,主要用到两个注解:@RestControllerAdvice
和@ExceptionHandler
:
package com.example.demo.advice;import com.example.demo.exception.CustomException;import com.example.demo.result.Result;import lombok.extern.slf4j.Slf4j;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;import org.springframework.web.bind.MethodArgumentNotValidException;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControllerAdvice;import javax.validation.ValidationException;/** * 全局异常统一处理 * * @auther wangbo * @date 2021-01-13 17:16 */@Slf4j@RestControllerAdvicepublic class ExceptionHandlerAdvice { /** * 通用异常处理 */ @ExceptionHandler(Exception.class) public Result exceptionHandler(Exception e) { log.info("通用异常处理"); return Result.failure(e.getMessage()); } /** * 自定义异常处理 */ @ExceptionHandler(CustomException.class) public Result customExceptionHandler(CustomException e) { log.info("自定义异常处理"); return Result.error(e.getResultCode()); } /** * 参数校验异常处理 */ @ExceptionHandler(MethodArgumentNotValidException.class) public Result methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) { log.info("参数校验异常处理"); BindingResult bindingResult = e.getBindingResult(); FieldError fieldError = bindingResult.getFieldError(); assert fieldError != null; return Result.failure(fieldError.getField() + " : " + fieldError.getDefaultMessage()); } /** * 参数校验过程异常处理 */ @ExceptionHandler(ValidationException.class) public Result validationExceptionHandler(ValidationException e) { log.info("参数校验过程异常处理"); String message = e.getCause().getMessage(); if (message != null) { return Result.failure(message); } return Result.failure("请求参数校验错误"); }}
最后两个有关参数校验的异常处理在本文中并没有使用,是在接口参数校验中用到,见另一篇文章。
使用示例,直接进行抛出,抛出的异常会在全局异常处理类中统一进行处理:
@GetMapping("/list")public Listlist(){ if (true){ //直接抛出异常,该自定义异常会被ExceptionHandlerAdvice类中的customExceptionHandler方法处理。 throw new CustomException(ResultCode.REQUEST_PARAM_ERROR); } return userService.list();}
这个接口会直接返回如下结果:
{ "code":50001, "message":"请求参数错误", "data":null}
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月16日 13时58分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Nginx配置反向代理与负载均衡
2019-03-05
高阶函数reduce
2019-03-05
Lionheart万汇:布林线双底形态分析技巧
2019-03-05
Lionheart万汇:台积电大幅提升资本开支,2021有望续创辉煌
2019-03-05
LHCM万汇:在需求上升中,美国贸易赤字创下历史新高
2019-03-05
Mybatis的入门01
2019-03-05
Vue路由嵌套刷新后页面没有重新渲染
2019-03-05
Vue使用bus进行组件间、父子路由间通信
2019-03-05
数据库三个级别封锁协议
2019-03-05
类的实例
2019-03-05
tomcat加载部署webapps目录下的项目
2019-03-05
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2019-03-05
方法重写
2019-03-05
Threading Programming Guide(多线程编程指南)
2019-03-05
Java求逆波兰表达式的结果(栈)
2019-03-05
SDWebImage--http图片加载不出来的问题
2019-03-05
Application received signal SIGSEGV
2019-03-05
MySQL删除数据库时的错误(errno: 39)
2019-03-05
Win10 JDK配置环境变量以及为什么需要配置每部分的原因
2019-03-05
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2019-03-05