使用 ControllerAdvice 注解处理 controller 产生的异常

概述

实际上我们编写 controller 层的时候一定要考虑到参数所有可能出现异常的可能,并对其进行处理,这样才是良好的代码。


public static void require(String fieldName,String... str) {
    for (String s : str) {
        if (StringUtils.isEmpty(s)) {
            throw new ValidatorException(fieldName + "含有空值!");

        }
    }
}
public static void length(String fieldName, int min, int max ,String str) {
    int len = 0;
    if (!StringUtils.isEmpty(str)) len = str.length();
    if (len < min || len > max) {
        throw new ValidatorException(fieldName + "不符合长度!");
    }

}

在本次业务中需要校验参数是否为空和长度是否符合规定,但每次接收的时候都需要去编写异常处理的代码显得很是冗余。

所以这里就是用到了 ControllerAdvice 注解来进行统一处理异常。

代码

我们建立一个类之后,将 @ControllerAdvice 注解加上便可以声明此类为一个异常处理类。

@ControllerAdvice
public class ControllerExceptionHandler {

然后我们就需要编写对应异常的处理方法,我们使用 @ExceptionHandler(value = ValidatorException.class)
来进行绑定对应的异常,这个异常类就是前面编写的校验方法所抛出的。

然后返回如何处理即可。

@ResponseBody
public ResponseDto validatorExceptionHandler(ValidatorException e){
    ResponseDto responseDto = new ResponseDto();
    responseDto.setSuccess(false);
    responseDto.setMessage(e.getMessage());
    return responseDto;
}