node怎么判断前端传过来的参数对象为空?_帮你少写⼀⼤半
参数校验代码的⼩技巧...
介绍
⼏乎每个web⽹站都会对⽤户提交的参数进⾏校验,前端要做,后端也要做。防⽌⽤户直接通过接⼝调⽤的⽅式来请求或保存数据,从⽽导致产⽣脏数据等其他严重的后果。
因为有些校验的逻辑也很繁琐,为了减轻开发者的负担,Java发布了 JSR303/JSR-349数据校验规范
JSR303 是⼀项标准,JSR-349 是其的升级版本,添加了⼀些新特性,他们规定⼀些校验规范即校验注解,如
@Null,@NotNull,@Pattern,他们位于 straints 包下,只提供规范不提供实现。⽽ hibernate validation 是对这个规范的实践(不要将 hibernate 和数据库 orm 框架联系在⼀起),他提供了相应的实现,并增加了⼀些其他校验注解,如
@Length,@Range 等等,他们位于 org.straints 包下。⽽万能的 spring 为了给开发者提供便捷,对hibernate validation 进⾏了⼆次封装,显⽰校验 validated bean 时,你可以使⽤ sp
ring validation 或者 hibernate validation,⽽spring validation 另⼀个特性,便是其在 springmvc 模块中添加了⾃动校验,并将校验信息封装进了特定的类中。这⽆疑便捷了我们的web 开发
在spring boot项⽬中只要加⼊如下依赖即可使⽤校验注解
查看⼦依赖会发现有如下依赖
JSR提供的部分校验注解如下
经常被搞混的3个注解
我来举⼀个org.apachemons.lang3.StringUtils中的例⼦,你就能理解NotBlank的意思了,如下断⾔都能测试通过
改造⼀个注册的接⼝
先定义⼀下状态枚举类
定义项⽬的返回对象
注册接⼝,这⾥省略了⼀部分校验
当不满⾜条件时返回如下
{
"status": 2,
"msg": "⽤户名不能为空"validation框架
}
当参数较多,校验的逻辑也越来越多,这时可以直接将前端传过来参数直接转为对象
代码将不满⾜条件的字段的描述取⼀个出来返回,类似如下。当都满⾜时才会返回成功
{
"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&herName=liu

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。