ControllerAdvice
指示带注释的类辅助“控制器”。
作为的特殊化@Component ,允许通过类路径扫描自动检测实现类。
通常用于定义@ExceptionHandler , @InitBinder 和@ModelAttribute 适用于所有@RequestMapping 方法的方法。
之一的annotations() ,basePackageClasses() , basePackages() 或它的别名value() 可以被指定,以限定控制器,以协助的特定子集。当应用多个选择器时,将应用“或”逻辑-表示选定的控制器应至少匹配一个选择器。
默认行为(即,如果不使用任何选择器使用),带@ControllerAdvice 注释的类将帮助所有已知的Controller。
请注意,这些检查是在运行时完成的,因此添加许多属性并使用多种策略可能会带来负面影响(复杂性,性能)。
/** * SpringMVC统一异常处理 * 注:@ControllerAdvice为Controller层增强器,其只能处理Controller层抛出的异常; * 由于代码间的层级调用机制 、异常的处理机制等,所以这里处理Controller层的异常,就相当于 * 处理了全局异常 * @author */
@RestControllerAdvice public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class) public Object bindException(MethodArgumentNotValidException e) { BindingResult bindingResult = e.getBindingResult(); StringBuilder sb=new StringBuilder(); sb.append("基础数据校验不通过:"); for (FieldError fieldError : bindingResult.getFieldErrors()) { sb.append("\n"); sb.append(fieldError.getDefaultMessage()); } Map<String,Object> result=new HashMap<>(); result.put("code","00000010"); result.put("data",sb.toString()); return result; }
}
@Length(min = 12,message = "订单号长度不正确") @NotBlank(message = "订单号不能为空") String orderId; |