参数校验
你是否如上图进行参数校验? 单选 0人 0% A.是 0人 0% B.不是 投票
作为后端工程师,接口的参数校验重要性不言而喻,即使前端同学做了数据校验,也要防止绕过客户端通过 http 工具请求非法数据。如何减少一堆 if 参数判断呢,可以使用 @ Validated 实现。
controller 层参数校验
1、单个参数的校验
注意:Validated 注解需要写到类上,不然不生效。
访问如下链接,会抛出异常。
http://127.0.0.1:8009/userLogin.do?username=123&password=101
前端显示:
2、实体类校验
Customer
controller
① 默认注解
说下易混淆的三个注解 NotEmpty、NotBlank、NotNull
a.NotNull: 不能为 null,但可以为 empty, 没有 Size 的约束
b.NotEmpty : 不能为 null,且 Size>0
c.NotBlank: 只用于 String, 不能为 null 且 trim () 之后 size>0
② 自定义注解
MyValid
MyConstraintValidator
③ 简单应用
上述情况,不校验带有分组的参数,通过 bindingResult 获取错误信息。
④ 分组
同一个类的校验,有些情况,某些字段不是必须校验的,这个时候可以用分组来区分。
上述情况,会同时校验带有分组的字段,也会校验默认无分组的字段。
@Validated(value = { Customer.UserRegisterValidView.class, Default.class})
5、@Valid 和 @Validated 区别
① Valid 作用在方法,字段,构造器和参数上注,所属包为:Javax.validation.Valid;Validated 作用在类 方法 和参数上,是 @Valid 的一次封装,是 Spring 提供的校验机制使用。
② Validated 和 Valid 配合 BindingResult 对对象进行校验 ,如果校验不通过,那么错误信息就会封装到 BindingResult 对象了,可以通过 bindingResult 的相关方法获取详细的错误信息并返回给用户。
③ Valid 支持嵌套校验,例如要对 List<Customer>校验,需要在字段 list 上加 @Valid。
④ Validated 支持分组,而 Valid 不支持。
欢迎关注 @Python大星 ,一个会点 Python 的 Java 程序员。如果你有更好的想法,欢迎留言,一起探讨,想说你就说啊!
@Python大星 | 文
还没有评论,来说两句吧...