欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot学习笔记(六):全局异常处理

程序员文章站 2022-05-03 10:23:41
...

SpringBoot可以使用@ControllerAdvice注解进行全局异常的处理,这样可以方便统一对异常的处理返回

1.处理常见异常

首先我们需要确定一个异常处理统一返回的格式

@Data
public class BaseResult {
    /**
     * 返回code,成功为0,失败为-1
     */
    private String code;

    /**
     * 返回数据
     */
    private Object data;

    /**
     * 返回信息
     */
    private String msg;

    public BaseResult(){

    }

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

    public BaseResult success(Object data, String msg) {
        return new BaseResult("0", data, msg);
    }

    public BaseResult failed(String msg) {
        return new BaseResult("-1", null, msg);
    }
}

接着定义一个全局异常处理类,这里以空指针异常为目标进行处理返回

@ControllerAdvice
@ResponseBody
public class BaseExceptionHandler {

    @ExceptionHandler(NullPointerException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public BaseResult handleNullException(NullPointerException e){
        return new BaseResult().failed("空指针异常");
    }
}

测试请求

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        String s = null;
        s.toString();
        return "test";
    }
}

SpringBoot学习笔记(六):全局异常处理

2.处理自定义异常

除了一些常见异常的处理,我们还可以自定义一些业务异常

public class BusinessException extends RuntimeException{
    /**
     *  自定义项目内异常
     */
    public BusinessException(String msg){
        super(msg);
    }
}

在全局异常处理类里添加对自定义异常的处理

@ExceptionHandler(BusinessException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public BaseResult handleBusinessException(BusinessException e){
    return new BaseResult().failed(e.getMessage());
}

测试请求

@GetMapping("/test2")
public String test2() {
    try {
        int i = 1 / 0;
    } catch (Exception e) {
        throw new BusinessException("测试自定义异常");
    }
    return "test2";
}

/ 0;
} catch (Exception e) {
throw new BusinessException(“测试自定义异常”);
}
return “test2”;
}


![image-20200721215445238](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZS10d3kyMDE4Lm9zcy1jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20vbm90ZS9pbWFnZS0yMDIwMDcyMTIxNTQ0NTIzOC5wbmc?x-oss-process=image/format,png)
相关标签: SpringBoot