前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot配置全局异常处理器

Spring Boot配置全局异常处理器

作者头像
良月柒
发布2019-03-19 16:31:25
1.3K0
发布2019-03-19 16:31:25
举报
一.自定义自己的异常类MyException.java
代码语言:javascript
复制
public class MyException extends RuntimeException {private int code;
public MyException( int code, String message ) {super(message);this.code = code;}
public int getCode() {return code;}
public void setCode(int code) {this.code = code;}}

创建自定义异常类原因:java自己的异常类只有message参数,这里我们还需要一个code参数(用来记录请求状态)。并且创建自定义异常还能和系统异常区分开来。

二.统一异常返回格式Result.java
代码语言:javascript
复制
public class Result implements Serializable {private int code;private String msg;private Object data;
public int getCode() {return code;}
public void setCode(int code) {this.code = code;}
public String getMsg() {return msg;}
public void setMsg(String msg) {this.msg = msg;}
public Object getData() {return data;}
public void setData(Object data) {this.data = data;}}
三.编写全局异常处理器MyExceptionHandle.java
代码语言:javascript
复制
@ControllerAdvicepublic class MyExceptionHandle {private static final Logger logger = LoggerFactory.getLogger(MyExceptionHandle.class);
@ExceptionHandler(value = Exception.class)    @ResponseBodypublic Result handle(Exception e) {if(e instanceof MyException) {MyException myException = (MyException)e;return ResultUtil.error(myException.getCode(),myException.getMessage());}else{logger.error("系统异常",e);return ResultUtil.error(ResultEnum.UNKNOWN_ERROR.getCode(),ResultEnum.UNKNOWN_ERROR.getMsg());}}
}
四.其它类

ResultEnum.java:作用:规范错误码code极其具体表示含义。方便维护。

代码语言:javascript
复制
public enum ResultEnum {
UNKNOWN_ERROR(500,"未知错误"),SUCCESS(200,"操作成功"),ERROR_1(111,"未成年1"),ERROR_2(112,"未成年2");
private int code;private String msg;
ResultEnum(int code, String msg) {this.code = code;this.msg = msg;}
public int getCode() {return code;}
public String getMsg() {return msg;}}

ResultUtil.java:作用:方便生成Result.java而已

代码语言:javascript
复制
public class ResultUtil {
public static Result error(int code,String msg) {Result result = new Result();result.setCode(code);result.setMsg(msg);result.setData(null);return result;}
public static Result success(Object obj) {Result result = new Result();result.setCode(200);result.setMsg("成功");result.setData(obj);return result;}
public static Result success() {Result result = new Result();result.setCode(200);result.setMsg("成功");result.setData(null);return result;}
}

HelloController.java

代码语言:javascript
复制
@RestControllerpublic class HelloController {
@GetMapping("/aa")public Result aa(Girl girl) throws Exception {if(girl.getId() < 18) {throw new MyException(ResultEnum.ERROR_1.getCode(),ResultEnum.ERROR_1.getMsg());}else if(girl.getId() < 20) {throw new MyException(ResultEnum.ERROR_2.getCode(),ResultEnum.ERROR_2.getMsg());}return ResultUtil.success("aaa");}
}
五.测试结果
六.注意事项

1.@RestController:等价于@Controller 、@ResponseBody一起使用

2.@ControllerAdvice:主要和@ExceptionHandler配合使用,来配置全局异常处理器,另外@ControllerAdvice内部使用了@Component注解,因此会自动被spring容器加载。如图:

3.自定义异常需要继承RuntimeException异常类,否则spring不会对事务进行回滚。

七.总结

全局异常处理器配置核心就是上面的注解。主要作用是为了将程序中可能出现的异常情况自己抛出然后用通用的格式显示。以便正确的处理错误。另外,代码如果想要优化就立马优化,如果说以后优化基本就等于永远不不会优化了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.自定义自己的异常类MyException.java
  • 二.统一异常返回格式Result.java
  • 三.编写全局异常处理器MyExceptionHandle.java
  • 四.其它类
  • 五.测试结果
  • 六.注意事项
  • 七.总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档