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);
	}

	

二、 总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕枫技术笔记

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值