Springboot 全局异常处理类

全局异常处理

在开发过程中,不管是Dao、Servie、Controller,层都有可能发生异常,对于异常处理,通常是try-catch或者直接throw,这会让try-catch的代码在代码中任意出现,系统的代码耦合度高,代码不美观,统一异常处理可以美化代码。
全局异常处理不仅可以处理java中自带的异常,还可以处理自定义异常类。

全局异常处理编写流程

1.编写自定义异常类
2.编写全局异常处理类
3.在业务代码中抛出异常

1.编写自定义异常类

public class NotLoginException extends Exception{
//编写一个无参构造和有参构造
	public NotLoginException(){
		super();
	}
	public NotLoginException(String msg){
		super(msg);
	}
}

2.编写全局异常处理类

@RestControllerAdvice
public class GlobalExceptionAdvice{
	@ExceptionHandler(NotLoginException.class)
	public Result NotLoginExceptionHandler(NotLoginException notLoginException){
		Result result = new Result();
        String message = notLoginException.getMessage();
        result.put("msg", message);
        result.put("code", 0);
        return result;
	}
}

①在全局异常处理类上需要添加注解 @RestControllerAdvice
@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。
在捕获异常之后也可以返回自定义结果集,返回json字符串

@ExceptionHandler 参数填写想要捕获的异常

3.在业务代码中抛出自定义异常

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("token");
        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
        if(Strings.isEmpty(token)){
            throw new NoTokenException("请求未携带token身份验证令牌");
        }
        String s = valueOperations.get(token);
        if (Strings.isNotEmpty(s)) {
            JSONObject jsonObject = JSON.parseObject(s);
            if (jsonObject != null) {
                return true;
            }
        }
        throw new NotLoginException("用户未登录");//使用异常捕获,可以为前端返回自定义的信息
    }

在这里插入图片描述
最后运行程序就可以在运行中捕获异常并向前端返回数据了

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值