SEO基础知识

伟德BETVICTOR-韦德betvictor-betvictor92伟德

字号+ 作者:长沙seo强 来源:未知 2019-12-26 15:37 我要评论( )

几乎每个web韦德betvictor都会对用户提交的参数进行校验,前端要做,后端也要做。防止用户直接通过接口调用的方式来请求或保存数据

帮你少写一大半参数校验代码的小技巧

 

介绍

几乎每个web韦德betvictor都会对用户提交的参数进行校验,前端要做,后端也要做。防止用户直接通过接口调用的方式来请求或保存数据,从而导致产生脏数据等其他严重的后果。

因为有些校验的逻辑也很繁琐,为了减轻开发者的负担,Java发布了 JSR303/JSR-349数据校验规范

JSR303 是一项标准,JSR-349 是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如 @Null,@NotNull,@Pattern,他们位于 javax.validation.constraints 包下,只提供规范不提供实现。而 hibernate validation 是对这个规范的实践(不要将 hibernate 和数据库 orm 框架联系在一起),他提供了相应的实现,并增加了一些其他校验注解,如 @Length,@Range 等等,他们位于 org.hibernate.validator.constraints 包下。而万能的 spring 为了给开发者提供便捷,对 hibernate validation 进行了二次封装,显示校验 validated bean 时,你可以使用 spring validation 或者 hibernate validation,而 spring validation 另一个特性,便是其在 springmvc 模块中添加了自动校验,并将校验信息封装进了特定的类中。这无疑便捷了我们的 web 开发

在spring boot项目中只要加入如下依赖即可使用校验注解

帮你少写一大半参数校验代码的小技巧

 

查看子依赖会发现有如下依赖

帮你少写一大半参数校验代码的小技巧

 

JSR提供的部分校验注解如下

帮你少写一大半参数校验代码的小技巧

 

经常被搞混的3个注解

帮你少写一大半参数校验代码的小技巧

 

我来举一个org.apache.commons.lang3.StringUtils中的例子,你就能理解NotBlank的意思了,如下断言都能测试通过

帮你少写一大半参数校验代码的小技巧

 

改造一个注册的接口

先定义一下状态枚举类

帮你少写一大半参数校验代码的小技巧

 

定义项目的返回对象

帮你少写一大半参数校验代码的小技巧

 

注册接口,这里省略了一部分校验

帮你少写一大半参数校验代码的小技巧

 

当不满足条件时返回如下

{
 "status": 2,
 "msg": "用户名不能为空"
}

当参数较多,校验的逻辑也越来越多,这时可以直接将前端传过来参数直接转为对象

帮你少写一大半参数校验代码的小技巧

 

帮你少写一大半参数校验代码的小技巧

 

代码将不满足条件的字段的描述取一个出来返回,类似如下。当都满足时才会返回成功

{
 "status": 2,
 "msg": "用户名不能为空"
}

需要注意的地方如下

参数 Student 前需要加上@Valid或@Validated 注解(下文说这2个注解的区别),表明需要 spring 对其进行校验,而校验的信息会存放到其后的 BindingResult 中。注意,必须相邻,如果有多个参数需要校验,形式可以如下。foo(@Validated Student student, BindingResult studentBindingResult ,@Validated Bar bar, BindingResult barBindingResult); 即一个校验类对应一个校验结果。

@Validated比@Valid的功能更强大

@Validated比@Valid的功能更强大,主要体现在@Validated可以进行分组校验和嵌套校验。

如果同一个类,在不同的使用场景下有不同的校验规则,那么可以使用分组校验,用处不多,不再介绍。介绍一下嵌套校验

假如我们还要求学生填写父亲和母亲的名字(并且不能为空),而后端的设计中父亲和母亲的名字被放在另一个类Relation中,这就要求我们能进行嵌套校验。

我们要做如下2个事情

1.将方法中的@Valid注解改为@Validated

2.在relation属性上加@Valid注解

帮你少写一大半参数校验代码的小技巧

 

帮你少写一大半参数校验代码的小技巧

 

那Relation类的fatherName属性如何被赋值呢?

很简单,前端传入的参数名是如下即可

xxxx?relation.fatherName=li&relation.motherName=liu

韦德betvictor部分内容转载自其他平台,如有侵权请联系删除

1.本站遵循行业规范,转载的原创稿件尽可能标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源;3.作者投稿可能会经我们编辑修改或补充。

相关文章
万词霸屏系统