没有使用注解验证
要求:员工的名称不能为空,且长度不能超过10个字符,那么我们以前的做法大致如下:
写完,我们启动项目测试下:
(1)名称为空情况
(2)正常情况
(3)超过长度情况
可以看到,和我们料想中的一样,毫无问题。
除了名称外,我们规定年龄也是必填项,且范围在1到100岁,那么此时,我们需要增加对应判定代码如下:
那么问题来了,现在员工对象 Employee 就 2 个字段,我们就写了 10 多行的代码验证,要是有20个字段,岂不是要写 100 多行代码?通常来说,当一个方法中的无效业务代码量过多时,往往代码设计有问题,当然这不是我们所想看到都结果。
那么如何解决呢?首先大家应该会想到将对应的验证过程抽成一个验证方法,如下:
这样来看,我们的业务方法就清爽多了。
但这种方式只是抽了一个方法,有一种换汤不换药的感觉,虽然业务方法看起来清爽了很多,但书写代码量并没有下降,反而还多出了一个方法,这也不是我们理想中的样子。
@Valid 使用
此时,我们引出 Spring 中的 @valid 注解,这些问题就可以迎刃而解了,具体如下:
首先,我们在 Maven 配置中引入 @valid 的依赖:
如果你是 springboot 项目,那么可以不用引入了,已经引入了,他就存在于最核心的 web 开发包里面。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
如果你不是 springboot 项目,那么引入下面依赖即可:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
那么针对上面情景,我们可以对我们的代码进行优化了。
首先我们在类的属性上打上如下注解:
然后再 Controller 对应方法上,对这个员工标上 @Valid 注解,表示我们对这个对象属性需要进行验证
既然验证,那么就肯定会有验证结果,所以我们需要用一个东西来存放验证结果,做法也很简单,在参数直接添加一个BindingResult,具体如下:
对应获取验证结果的代码如下:
OK ! 万事俱备 !我们进行测试下:
(1)名称为空
(2)名称正常,年龄为空
(3)名称超出范围,年龄正常
(4)名称正常,年龄超出范围
可以看到,代码不但简洁了很多,结果和预期的也一模一样!很棒吧!!
原文链接:https://blog.csdn.net/sunnyzyq/article/details/103527380
标签:验证,代码,Valid,为空,注解,Validated,我们 From: https://www.cnblogs.com/2393920029-qq/p/17247689.html