springboot之统一异常处理

统一异常处理原理是,系统中出现的所有异常都往外抛,最终用一个异常处理类统一捕获处理。
Service层有异常(可以是用户自定义的异常,一可以是其他运行时异常)往外抛给Controller层,
Controller层的异常也不进行处理而是直接往外抛,最后被统一异常处理类捕获并处理。
要实现统一异常处理,通常要有如下几个类
1、自定义异常类(如数据验证不合法直接抛出自定义异常,可不用)
2、统一结果集封装类(方便前端处理数据,可以不用)
3、统一异常处理类

下面上代码

自定义异常类:

package com.laowang.springboot.functions;

public class GlobalException extends Exception{
public GlobalException(String message){
super(message);
}
}

统一结果集封装类

package com.laowang.springboot.functions;

public class JsonResult {
private Integer status;
private String message;
private Object data;

public Integer getStatus() {
    return status;
}

public void setStatus(Integer status) {
    this.status = status;
}

public String getMassege() {
    return message;
}

public void setMassege(String massege) {
    this.message = massege;
}

public Object getData() {
    return data;
}

public void setData(Object data) {
    this.data = data;
}

public JsonResult(Integer status) {
    this.status = status;
}

public JsonResult(Integer status, String massege) {
    this.status = status;
    this.message = massege;
}
public JsonResult(Integer status, Object data) {
    this.status = status;
    this.data=data;
}
public JsonResult(Object data) {
    if (data!=null) {
        this.data = data;
        this.status=1;
    }else {
        this.status=0;
    }
}

}

统一异常处理类
package com.laowang.springboot.functions;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;

@RestControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(GlobalException.class)
public  JsonResult GlobalHandler(HttpServletRequest req,GlobalException e){
    String msg = req.getRequestURI()+",ErrMsg:"+e.getMessage();
    return new JsonResult(0,msg);
}

@ExceptionHandler(Exception.class)
public  JsonResult ExcptionHandler(HttpServletRequest req,Exception e){
    String msg = req.getRequestURI()+",Exception:"+e.getMessage();
    return new JsonResult(0,msg);
}

}

再看Controller层

@RestController
public class HelloController {

@RequestMapping("/err")
public JsonResult err() throws Exception {
    throw new GlobalException("用户抛出异常");       
}

}

运行结果返回Json
在这里插入图片描述
总结:
统一异常处理是比较简单,有些坑要注意
1、Controller方法中忘记加 throws Exception
2、在SpringBoot中异常处理类常用@RestControllerAdvice 而不是@ControllerAdvice,@RestControllerAdvice可以直接返回Json格式数据, 而@ControllerAdvice想要返回Json还要与@ResponseBody配合使用

ps: 写这篇博客希望可以帮助到想我一样的初学者,如有不当之处请大神们指出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值