校验浏览器请求服务器,服务器控制器中的方法中的参数是否为null,大小范围是否合适,是否为空字符串,集合是否为空内容等。如果是合理的正常进入业务流程,否则将参数不合法的信息传递给浏览器页面,提示用户重新输入。
控制器方法中的参数有两类,包装数据类型(Users users ),单个的数据类型(String name).对于两种类型的数据校验操作是不同的!
0 springboot项目数据校验使用的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
1 包装数据类型(Users)的校验
流程:
用户在addUser.html中输入用户名,用户性别,用户年龄,点击提交,浏览器发送请求,请求服务器的user/addUser方法,参数信息传递过去。
addUser方法发现参数Users user前面有一个@Validate,Users里面的属性前面有@NotNull信息,spring-boot-starter-validation会根据这个去检查每一个参数是否合法,并将结果放在 BindingResult result对象中。return “addUser” springboot框架会将寻找界面addUser将信息返回给这个界面,界面通过th:errors="${键.属性名称}"将校验结果获取成为字符串。
最后将这些字符串输出给浏览器,用户就看见校验结果。
step1: 对象属性前加校验条件
在Users中的属性变量前面增加注解@NotNull(message=“xx基本数据类型的包装数据类型不能为null”)、@NotBlank(message=“xx字符串不能为空串”)、@NotEmpty(message=“集合不能为空集合”)、@Min(数字)、@Max(数字)等
这些注解来源:javax.validation.constraints包
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
代码:
package com.bjsxt.springbootmybatise.pojo;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
public class Users {
@NotNull(message = "{id.notnull}")
private Integer id;
@NotBlank(message = "{name.notnull}")
private String name;
@NotBlank(message = "{sex.notnull}")
private String sex;
@NotNull(message = "{age.notnull}")
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex == null ? null : sex.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
注意:
message 中是提示信息,不写有默认提示信息,写具体字符串是硬编码,使用花括号引入文件中的提示信息比较方便后期修改!这个文件名称固定。ValidationMessages.properties。里面的提示信息需要转变成ascii编码,不换的话界面会显示乱码的提示信息。用的是jdk的native2ascii.exe。比如,提示信息希望是用户id不能为空-pro,只需要输入后回车就能获取到ascii吗。
固定名称的校验文件 ValidationMessages.properties
id.notnull=\u7528\u6237Id\u4e0d\u80fd\u4e3a\u7a7a-pro
name.notnull=\u7528\u6237\u59d3\u540d\u4e0d\u80fd\u4e3a\u7a7a-pro
sex.notnull=\u7528\u6237\u6027\u522b\u4e0d\u80fd\u4e3a\u7a7a-pro
age.notnull=\u7528\u6237\u5e74\u9f84\u4e0d\u80fd\u4e3a\u7a7a-pro
#使用jdk的native2ascii.exe,将汉字转成ascii编码
获取提示信息的ascii编码
step 2:控制器的方法中的对象参数前面加校验属性
@Validated
@ModelAttribute(“user”)指定返回给浏览器的键的名称,不写默认就是类名的小写驼峰命名。
@RequestMapping("/addUser")
public String addUser(@ModelAttribute("user")@Validated Users users, BindingResult result){
if(result.hasErrors()){
List<ObjectError> allErrors = result.getAllErrors