SpringBoot代码整洁之道系列之一:全局异常处理

引言

网上看到这样一句话觉得很有意思分享给大家,这句话是:你写过的代码,藏着你读过的书、看过的风景、走过的路、听过的音乐以及爱过的人。虽然是句玩笑话,但是这也体现了大家对于编写优雅整洁代码的自我诉求以及鞭策。

从本篇开始,我将写一些关于使用SpringBoot开发项目时,如何进行代码整洁实践的系列文章。糟糕的代码不仅BUG百出,也不利于进行团队开发以及扩展。因此,编写优雅整洁的代码不仅能提供团队的开发效率也同时利于未来的扩展。Less coding, more thinking Think more, code less

  • 全局异常处理
  • 总结

一、 全局异常处理

1、使用@RestControllerAdvice注解来处理异常

(1)定义异常类

public class ProgramException extends RuntimeException{

    //错误码
    private String code;

    //错误信息
    private String msg;

    public ProgramException(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

(2)定义全局响应对象

public class ReponseData {

    //错误码
    private String code;

    //错误信息
    private String msg;

    //响应数据
    private Object data;

    public ReponseData(String code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    
    public ReponseData(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String 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;
    }

(3)定义全局异常处理器

@RestControllerAdvice
public class BusinessServiceExceptionHandler {
private Logger logger = LoggerFactory.getLogger(BusinessServiceExceptionHandler.class);
    
    @ExceptionHandler(ProgramException.class)
    @ResponseStatus(ProgramException.class)
    public ResponseData handleException(ProgramException e, HttpServletRequest req){
    return new ResponseData(e.getCode(), e.getMsg());
    }
}

比较推荐使用这种方法,简单明了,特别是现在前后端分离,后端提供统一的Restful接口给前端,如果出现异常,可以由异常处理器来统一进行错误信息的返回。

2、使用SimpleMappingExceptionResolver处理全局异常

@Configuration
public class GlobalExceptionResolver extends SimpleMappingExceptionResolver{
    
private static Logger log = LoggerFactory.getLogger(GlobalExceptionResolver.class);
    
    public GlobalExceptionResolver() {
        setOrder(0);
    }

    

二、 总结

整洁代码不仅包括实际项目中的业务代码,也包括一些系统级别的。全局异常处理属于系统级的整洁代码。如果我们把我们的项目比做成一座城市,那么类似全局异常处理、拦截器等等就相当于这座城市的排水系统、电缆布置等等。这些设施布置的好坏直接影响整个城市的运转情况。那么在项目层级来说,系统级的整洁代码就是为了使得项目可以更加高效的运转。


上一篇:Spring Boot 全局异常处理,这样写才优雅...


下一篇:查看CentOS的版本信息