3分钟快速上手springBoot全局异常处理
1.3分钟快速上手springBoot全局异常处理
统一异常处理
前后端都是有个统一的格式返回如Result,中有code,message,data。而若service、controller抛出异常则会导致不是统一格式的返回而是以下格式:
而导致前端接受不到约定好的code,message最终导致内部发生异常而用户却得不到最基本的反馈。
可以通过java中统一异常处理的方式抓取异常顶层controller抛出的异常,再对异常封装为约定好的Result对象
-
在新建类GlobalExceptionHandler上加上@RestControllerAdvice表示抓取全局Exceptinon并用json格式返回
@RestControllerAdvice public class GlobalExceptionHandler {
-
在方法名上加明@ExceptionHandler,并在value中表示要处理的特定异常,可以是自定义的异常UserException或则是RuntimeException
@ExceptionHandler(value = UserException.class) public Result<Object> handleBusinessException(HttpServletRequest httpServletRequest, UserException e) { return Result.userError(e.getMessage()); }
-
在写代码时显示抛出自定义异常:
public Boolean signUp(User user){ if (userMapper.signIn(user.getUsername(), user.getPassword()) != null) { throw new UserException("已有账号重复注册"); }
在此访问接口可以有自定义异常的信息
这样1.可以处理自定义异常2.可以处理其它意料外的异常统一返回;并且会自动优先匹配子类异常如优先级:UserException(继承了RuntimeException)-->RuntimeException-->Exception;
-
注意若捕获到子类异常则需要getCause().getmessage()获取异常错误信息不然message为null,以下为捕获RuntimeException子类的其它潜在异常的示例:
private Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(value = RuntimeException.class)
public Result<Object> handleRuntimeException(HttpServletRequest httpServletRequest, RuntimeException e) {
log.warn(e.getCause().getMessage());
return Result.serverError("系统内部错误");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix