@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>
那么针对上面情景,我们可以对我们的代码进行优化了。
首先我们在 Employee 类的属性上打上如下注解:
package com.zyq.beans;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
/**
* 员工对象
*
* @author sunnyzyq
* @since 2019/12/13
*/
public class Employee {
/** 姓名 */
@NotBlank(message = "请输入名称")
@Length(message = "名称不能超过个 {max} 字符", max = 10)
public String name;
/** 年龄 */
@NotNull(message = "请输入年龄")
@Range(message = "年龄范围为 {min} 到 {max} 之间", min = 1, max = 100)
public Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
然后再 Controller 对应方法上,对这个员工标上 @Valid 注解,表示我们对这个对象属性需要进行验证,
既然验证,那么就肯定会有验证结果,所以我们需要用一个东西来存放验证结果,做法也很简单,在参数直接添加一个BindingResult,具体如下:
对应获取验证结果的代码如下:
OK ! 万事俱备 !我们进行测试下:
(1)名称为空
(2)名称正常,年龄为空
(3)名称超出范围,年龄正常
(4)名称正常,年龄超出范围
可以看到,代码不但简洁了很多,结果和预期的也一模一样!很棒吧!!
常用注解:
除了刚刚都注解,最后再附加2个常用注解,我就直接贴图了,基本上这6个注解可以解决99%的字段.
AND:
@Data
public class Employee {
// javax.validation.constraints.*
@NotNull(message = "用户id不能为空")
private Long id;
@NotNull(message = "用户账号不允许为空")
@Size(min = 6,max =12,message = "账号长度必须在6-12个字符之间")
@Pattern(regexp = "^[\\\\u4E00-\\\\u9FA5A-Za-z0-9\\\\*]*$",message = "账号必须包含文字、字母和数字")
private String account;
@NotNull(message = "用户账号不允许为空")
@Size(min = 6,max =18,message = "账号长度必须在6-18个字符之间")
private String password;
@NotEmpty(message = "用户邮箱不允许为空")
@Email(message = "邮箱格式不正确")
private String email;
@Min(value = 18,message = "最新年龄为18岁")
private Integer age;
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式错误")
private String mobile;
}
其他注解:
原文地址:https://zyqok.blog.youkuaiyun.com/article/details/103527380?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control
原文有不用注解的写法。