springboot使用@Validated不起作用
1、检查是否有引依赖
2、检查是否在controller上是否添加@Validated,如图:
3、 嵌套对象校验
对于嵌套对象,需要在嵌套对象的属性上添加 @Valid 注解。
4、全局异常处理器是否有添加 MethodArgumentNotValidException
的处理,如图:
最后,Spring-Validate拓展
分组校验:使用接口进行定义分组校验:
public interface ValidationGroups {interface Create {} // 创建时校验组interface Update {} // 更新时校验组
}
在dto中使用:
@Data
public class UserDTO {@Null(groups = Create.class, message = "创建时ID必须为空")@NotNull(groups = Update.class, message = "更新时ID不能为空")private Long id;@NotBlank(groups = {Create.class, Update.class}, message = "用户名不能为空")private String username;
}
特别是在嵌套校验是需要使用@Valid进行触发嵌套校验。
在同一异常处理时:
校验失败时,Spring 会抛出:
MethodArgumentNotValidException
(@RequestBody
校验失败)
ConstraintViolationException
(方法参数校验失败)
我们一般在全局处理器去捕获并抛出。
异常转换
ExceptionHandlerExceptionResolver
查找匹配的 @ExceptionHandler
方法
精确异常类型优先(如 MethodArgumentNotValidException
> RuntimeException
)
Spring-Validate的核心流程图: