第五节:数据验证
有数据输入,就必然涉及到数据的验证以及数据验证失败后的处理。本节中,让我们共同学习SpringMVC
是如何进行数据验证的。
通过上节的学习,我们得知,SpringMVC
通过@RequestBody
注解将请求数据绑定到相应的实体中(对象)。数据绑定,其实是利用实体的set
方法进行了赋值的过程。数据的验证的过程我们也放置于此。
我们找到Teacher
实体,使用注解的方法设置如下验证规则:
@Column(length = 25) // 声明字段的长度为25
@Size(min = 2, max = 25) // 最小长度为2(不能为空),最大长度为25
private String name = ""; // 姓名
@Column(length = 50)
@NotNull // 此列不能为空
@Email // 邮箱验证
@Size(max = 50) // 最大长度为50
private String email = ""; // 邮箱
@Size(max = 255) // 最大长度为255
private String address = ""; // 地址. 不进行@Column声明,则默认长度为255
完整代码如下:
package com.mengyunzhi.repository;
import org.hibernate.validator.constraints.Email;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* Created by panjie on 17/4/5.
*/
// 使用@Entity 来说明该类对应一个数据表
@Entity
public class Teacher {
// 声明主键
@Id
// 声明主键生成策略为 自动
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(length = 25) // 声明字段的长度为25
@Size(min = 2, max = 25) // 最小长度为2(不能为空),最大长度为25
private String name = ""; // 姓名
@Column(length = 50)
@NotNull // 此列不能为空
@Email // 邮箱验证
@Size(max = 50) // 最大长度为50
private String email = ""; // 邮箱
@Size(max = 255) // 最大长度为255
private String address = ""; // 地址. 不进行@Column声明,则默认长度为255
private Boolean sex = false; // 性别:false(0),男。true(1),女.
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
public void setAddress(String address) {
this.address = address;
}
public void setSex(Boolean sex) {
this.sex = sex;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getAddress() {
return address;
}
public Boolean getSex() {
return sex;
}
public Teacher(String name, String email, String address, Boolean sex) {
this.name = name;
this.email = email;
this.address = address;
this.sex = sex;
}
public Teacher() {
}
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", address='" + address + '\'' +
", sex=" + sex +
'}';
}
}
重新启动应用:
正常数据:
姓名过短:
邮箱格式不合法:
其它的自行验证一下吧。
格式化验证错误信息
前面,我们虽然得到了错误的验证信息,但是错误的信息全部在message
字段中,这无疑为我们前台排错增加了一定的难度。SpringMVC
当然想到了这点。
我们打开TeacherController
控制器,为saveTeacher
方法增加一个@Valid
注解,并重新启动应用。
...
public Teacher saveTeacher(@Valid @RequestBody Teacher teacher) {
...
该注解位于:javax.validation.Valid;
此时,当我们再次发送一些数据而未验证成功时,将得到如下的错误信息:
没错,这就是我们想要的。
参考官方文档: https://spring.io/guides/gs/validating-form-input/ http://hibernate.org/validator/ https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/ https://docs.spring.io/spring/docs/4.3.7.RELEASE/spring-framework-reference/html/validation.html