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

Posted 听风者-better

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot学习笔记:全局异常处理相关的知识,希望对你有一定的参考价值。

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";
    

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";

以上是关于SpringBoot学习笔记:全局异常处理的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 学习笔记心得异常处理机制

SpringBoot学习14:springboot异常处理方式4(使用SimpleMappingExceptionResolver处理异常)

Springboot全局异常处理

springboot全局异常可以获取方法名吗

SpringBoot学习13:springboot异常处理方式3(使用@ControllerAdvice+@ExceptionHandle注解)

SpringBoot——全局异常处理