包区别
@Valid是javax包定义的一个注解,hibernate曾使用这个注解作为校验注解,目前在spring中也可以使用
@Validate是spring自定义的一个注解,支持分组校验,位于spring框架包内
标注位置区别
@Valid可以标注于方法,成员,构造,方法参数,类型声明
@Validate可以标注于类、接口、枚举、方法、方法参数
用法区别
两个注解抛出的异常是一样的 MethodArgumentNotValidException,可以填充BindingResult对象,通过全局异常捕捉MethodArgumentNotValidException后,可以从异常中取出BindingResult,调用bindingResult.getBindingResult().getTarget()可以获取spring校验的对象。
注意事项
有些项目的接口出入参打印是用AOP切controller方法做的,由于springMVC的接口入参检查在AOP之前,所以最好打印一下,不然报错了也不知道请求参数是什么,排查问题就麻烦了。
@Vlidate标注的对象是不支持嵌套检查且不支持标注在类成员上,比如你的对象A包含了对象B,对象B需要标注@Valid注解才可以进行嵌套检查,如果你要检查的对象是个List<泛型>,泛型也是不会被检查的,因为注解校验只对目标对象的成员进行检查
这些是应用层面的一些理解,这两个注解的历史发展和源码我没有深究,搜了下互联网也没有好的文章能详细介绍这两个注解,于是测试了一番发出来做个备忘。
网友评论