SpringBoot如何实现全局统一异常处理呢?项目目录结构
自定义异常类pom.xml加入lombok依赖
编写MyException.java类@Getter@Setterpublic class MyException extends RuntimeException { private Integer code; public MyException(String msg){ super(msg); } public MyException(Integer code,String msg){ super(msg); this.code=code; }}
自定义枚举类public enum ResultEnum { SUCCESS(200,'成功'), FAIL(100,'失败'), EXCEPTION(300,'系统异常'), UNLOGIN(201,'未登录'); private Integer code; private String msg; private ResultEnum(Integer code,String msg){ this.code=code; this.msg=msg; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; }
自定义全局异常捕获类@ControllerAdvicepublic class MyExceptionAdvice { @ExceptionHandler(value = Exception.class) @ResponseBody public Result defaultException(HttpServletRequest request,Exception e){ e.printStackTrace(); return Result.builder() .code(ResultEnum.EXCEPTION.getCode()) .message(ResultEnum.EXCEPTION.getMsg()) .build(); } @ExceptionHandler(value = MyException.class) @ResponseBody public Result myException(HttpServletRequest request,MyException e){ e.printStackTrace(); Integer code=e.getCode(); String message=e.getMessage(); if (e.getCode()==null){ code=ResultEnum.EXCEPTION.getCode(); } if (e.getMessage()==null){ message=ResultEnum.EXCEPTION.getMsg(); } return Result.builder() .code(code) .message(message) .build(); }}
编写ExceptionController进行测试@RestControllerpublic class ExceptionController { @RequestMapping('/exception') public Result exception(String name,String pwd) throws Exception { String realname='tiankonglanlande'; String realPwd='123'; if(null!=name&&name.equals('xx')){ throw new Exception('系统异常!'); } if(StringUtils.isEmpty(name)||StringUtils.isEmpty(pwd)){ throw new MyException('参数必须传!'); }else if (!name.equals(realname)||!pwd.equals(realPwd)){ throw new MyException('用户名或密码不正确!'); }else if (name.equals('aa')){ throw new MyException(200,'用户名存在!'); } String info='你好['+name+']!'; return ResultUtils.success(info); } @RequestMapping('/unlogin') public Result unlogin() throws Exception { return ResultUtils.success(ResultEnum.UNLOGIN); } @RequestMapping('/success') public Result success() throws Exception { return ResultUtils.success(200,'自定义消息'); }}
运行测试在浏览器访问可以看到浏览器返回对应的json字符
上面只是重要的代码片段,只做参考。直接拷贝是运行不了的,源码请点击参考资料链接下载