Spring Boot学习之五(数据验证)
1.在com.example.beans下创建MyUserView.java文件,内容如下:
package com.example.beans;
import javax.validation.constraints.NotBlank;
public class MyUserView {
private int id;
@NotBlank(message="{user.name.notBlank}")
private String name;
private String passwd;
数据验证:分为客户端和服务器验证,客户端验证主要是过滤正常用户的误操作,主要通过JavaScript代码完成;服务器验证是整个应用阻止非法数据的最后防线,主要通过在应用中编程实现。
其中@NotBland(message="{user.name.notBlank}")为使用JSR303注解验证。
其它的注解内容,见后面
2.在resources下新建ValidationMessages.properties文件。该文件用于显示错误信息,内容如下:
user.name.notBlank=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a
该文件内容是Unicode编码(注意)
3.创建控制器,代码如下
package com.example.demo.controller;
import com.example.beans.MyUserView;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class ValidationStudy {
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login(Model model){
MyUserView user=new MyUserView();
model.addAttribute("user",user);
return "/user/login";
}
@RequestMapping(value="/loginsave",method = RequestMethod.POST)
public String loginSave(@Validated MyUserView user, BindingResult result, Model model){
model.addAttribute("user",user);
if(result.hasErrors()){
String errorInfo=result.getFieldError().getDefaultMessage();
model.addAttribute("errorInfo",errorInfo);
return "/user/login";
}
return "/user/login";
}
}
在控制器类中,使用@Validated对模型对象进行验证,
4.在resources下创建user目录,在该目录下创建login.html文件,内容如下:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/loginsave" method="post">
用户名:<input type="text" name="name" th:value="${user.getName()}"/>
<br/><br/>
密码:<input type="text" name="passwd" th:value="${user.getPasswd()}"/>
<br/><br/>
<input type="submit" value="确定"/>
</form>
<div id="errorInfo">
<h4 th:text="${errorInfo}">错误信息</h4>
</div>
</body>
</html>
5.运行测试结果如下:
6.注解
@Null | 限制只能为null |
@NotNull | dD限制必须不为null |
@AssertFalse | 限制必须为false |
@AssertTrue | 限制必须为true |
@DecimalMax(value) | 限制必须为一个不大于指定值 |
@DecimalMin(value) | 限制必须为一个不小于指定值的数字 |
@Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
@Future | 限制必须是一个将来的日期 |
@Max(value) | 限制必须为一个不大于指定值的数字 |
@Min(value) | 限制必须为一个不小于指定值的数字 |
@Past | 限制必须是一个过去的日期 |
@Pattern(value) | 限制必须符合指定的正则表达式 |
@Size(max,min) | 限制字符长度必须在min到max之间 |
@NoteEmpty | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 |
|
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |