介绍
本文通过一个新增功能,描述SpringBoot、Hibernate-validate与Thymeleaf整合方法
1、在请求对象中添加校验注解
在请求对象UserReq中直接为各字段添加判断注解即可,比如判空校验、长度校验、格式校验等(具体判断方式这里就不一一列举了)
package com.example.demo.model;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
@Data
public class UserReq {
@NotBlank(message = "用户名必填")
@Length(min = 6,max = 15,message = "用户名长度为6-15位")
private String username;
@NotBlank(message = "密码必填")
private String password;
@Min(value = 18,message = "年龄不能小于18岁")
private int age;
@Email(message = "邮箱格式不合法")
private String email;
}
2、在控制器中开启校验模式
这里需注意两点,第一,在UserReq对象前面加上@Valid
注解即开启校验模式。第二,使用@ModelAttribute("validTip")
注解指定校验信息取值方式,validTip
是自定义的,这个在html中获取校验信息时会用到。
package com.example.demo.controller;
import com.example.demo.model.UserReq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.validation.Valid;
@Controller
@Slf4j
public class UserController {
/**
* 使用@ModelAttribute("validTip")指定校验失败提示信息key为validTip
* @param req
* @return
*/
@RequestMapping("/addUser")
public String showPage(@ModelAttribute("validTip") UserReq req){
return "/user/add";
}
/**
* Valid 注解示开启数据校验
* BindingResult 返回校验的结果
**/
@RequestMapping("/save")
public String saveUser(@ModelAttribute("validTip") @Valid UserReq req, BindingResult result){
//如果校验不通过,返回原界面
if(result.hasErrors()){
return "/user/add";
}
log.info(" valid success");
return "success";
}
}
3、视图模板回显提示信息
在templates目录下创建user文件夹,再新建add.html模板。可以看到,我们通过th:errors="${validTip.username}
方式获取校验提示信息,validTip
是我们之前在控制方法中指定的,username
为对应字段名。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form th:action="@{/save}" method="post">
姓名:<input type="text" name="username"/><font color="red" th:errors="${validTip.username}"></font><br/>
密码:<input type="password" name="password" /><font color="red" th:errors="${validTip.password}"></font><br/>
年龄:<input type="text" name="age" /><font color="red" th:errors="${validTip.age}"></font><br/>
邮箱:<input type="text" name="email" /><font color="red" th:errors="${validTip.email}"></font><br/>
<input type="submit" value="提交"/> </form>
</body>
</html>