# 异常处理

这些注解只会将Controller层出现的异常捕获,并且中断Controller层原先执行的函数,并将异常处理后的结果直接作为response返回给浏览器

# 注解

  • @ControllerAdvice 注明该类为Controller异常处理类
  • @RestControllerAdavice 等于@ControllerAdvice + @RequestBody
  • @ExceptionHandler 注明该方法处理哪一个异常

# 示例

# 普通式

@RestControllerAdvice
public class ControllerExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public String exception(Exception e){
        return e.getMessage();
    }
}

# 与参数校验结合

将统一异常处理与参数校验结合

@RestControllerAdvice
public class ControllerExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public String argumentNotValid(MethodArgumentNotValidException e){
        StringBuilder sb = new StringBuilder();
        e.getBindingResult().getFieldErrors().forEach((error) -> {
            sb.append(error.getDefaultMessage()); 
        })
        return sb.toString();
    }
}