SpringBoot中使用@ControllerAdvice注解做全局异常处理

@ControllerAdvice

@ControllerAdvice注解来源于SpringMVC,在SpringBoot中可直接使用,最常用之处是与@ExceptionHandler注解结合起来做全局异常处理。ControllerAdvice注解于类定义之上,被定义的类可以捕获Controller层抛出的异常,然后用自己的方法处理异常信息。

定义处理异常的类

首先定义一个异常处理类,分别包括处理空指针和数组越界两个异常的方法,返回自定义的字符串和PAYMENT_REQUIRED(402)状态码:

@ControllerAdvice
public class ExceptionAdvice {
    //处理空指针异常的方法
    @ExceptionHandler(NullPointerException.class)
    public ResponseEntity<String> handleNullPointerException(NullPointerException ex) {
        return new ResponseEntity<String>(ex.getMessage() + "(通过ExceptionHandler处理)", HttpStatus.PAYMENT_REQUIRED);
    }

    //处理数组越界异常的方法
    @ExceptionHandler(ArrayIndexOutOfBoundsException.class)
    public ResponseEntity<String> handleArrayIndexOutOfBoundsException(ArrayIndexOutOfBoundsException ex) {
        return new ResponseEntity<String>(ex.getMessage() + "(通过ExceptionHandler处理)", HttpStatus.PAYMENT_REQUIRED);
    }
}

定义控制层

这里定义一个控制层创建两个测试接口分别测试抛出空指针和数组越界异常:

@RestController
@RequestMapping("/")
public class ExceptionController {
    //测试抛出空指针异常
    @GetMapping("/nullpointer")
    public void Exception_NullPointer(){
        throw new NullPointerException("此处产生空指针异常");
    }

    //测试抛出数组越界异常
    @GetMapping("/array")
    public void Exception_ArrayIndexOutOfBounds(){
        throw new ArrayIndexOutOfBoundsException("此处产生数组越界异常");
    }
}

请求测试结果

在浏览器分别输入http://localhost:8100/array和http://localhost:8100/nullpointer可查看结果:
在这里插入图片描述
在这里插入图片描述
并且响应状态都为402。

你可能感兴趣的:(Java,java,spring,boot)