这里是修真院后端小课堂,每篇分享文从
八个方面深度解析后端知识/技能,本篇分享的是:
【Validation参数校验】
【修真院Java小课堂】Validation参数校验
大家好,我是IT修真院北京分院第35期一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java(职业)任务二,深度思考中的知识点——Validation参数校验
数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中.
JSR-303
JSR-303是Java为Bean数据合法性校验所提供的标准框架,它已经包含在JavaEE 6.0中。JSR-303通过在Bean属性上标注类似于 @NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证
JSR-303定义了一套可标注在成员变量、属性方法上的校验注解,
@Null 被注解的元素必须为null
@AssertTrue 被注解的元素必须为true
@AssertFalse 被注解的元素必须为false
@Max(value) 必须为数字,其值必须大于指定的最大值
@Size(max=, min=) 被注解的元素的大小必须在指定的范围内
@Past 被注解的元素必须是一个过去的日期
@Future 被注解的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator是JSR-303的一个参考实现,它除了支持所有标准的校验注解外,还支持一些扩展注解
@Email 被注解的元素必须是电子邮箱地址
@Length(min=,max=) 被注解的字符串的大小必须在指定的范围内
@NotBlank 验证字符串非null,且长度必须大于0
@Range(min=,max=) 被注解的元素必须在合适的范围内
Spring校验框架
Spring拥有自己独立的数据校验框架,同时支持JSR-303标准的校验框架。
Spring的org.springframework.validation是校验框架所在的包。LocalValidatorFactoryBean既实现了 Spring的Validator接口,又实现了JSR-303的Validator接口。只要在Spring容器中定义一个LocalValidatorFactoryBean 即可将其注入需要数据校验的Bean中。
Spring MVC数据校验
mvc:annotation-driven/ 会默认装配一个LocalValidatorFactoryBean,通过在处理方法的入参上 标注@Valid注解,即可让Spring MVC在完成数据绑定后执行数据校验工作
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
通过国际化资源显示错误信息,Spring中定义了一个MessageSource接口,以用于支持信息的国际化和包含参数的信息的替换。ApplicationContext接口继承了MessageSource接口,所以我们所有的ApplicationContext实现类都实现了MessageSource接口,也就是我们我们可以通过ApplicationContext来调用MessageSource接口方法以实现信息的国际化和替换信息中包含的参数。
7.参考文献
参考资料:https://blog.csdn.net/u013815546/article/details/77248003
————使用spring validation完成数据后端校验
8.更多讨论
@Valid和@Validated的区别?
@Valid是javax.validation里的提供的,@Validated是@Valid 的一次封装,是Spring提供的校验机制使用。@Validated 提供分组功能,一般来说用@Valid就够用了。
如果要进行校验的实体类有多个属性校验错误怎么办?
BindingResult的getFieldErrors()方法可以获得全部的属性校验错误,返回值是一个List,里面的元素是FieldError类型的,还是需要toString()来获得字符串形式的错误信息。
error.getFieldErrors()
传入的参数不是实体类而是单个参数,如何进行校验?
可以在Controller类上加上 @Validated 注解,表示该类中的处理方法允许单个参数校验。在需要校验的参数前直接标注规则注解,像在实体类属性上标注一样,但是这种方法如果校验不通过的话,会直接抛出一个异常,可能需要一个ControllerAdvice全局异常处理来进行捕获。
9.鸣谢
感谢观看,如有出错,恳请指正
10.结束语
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~