Spring @Valid和@Validate的简单理解

2023-07-02  本文已影响0人  freshforest

包区别

@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<泛型>,泛型也是不会被检查的,因为注解校验只对目标对象的成员进行检查

这些是应用层面的一些理解,这两个注解的历史发展和源码我没有深究,搜了下互联网也没有好的文章能详细介绍这两个注解,于是测试了一番发出来做个备忘。

上一篇下一篇

猜你喜欢

热点阅读