注解 | 作用 |
---|---|
@NotNull | 对基本数据类型的对象类型做非空校验 |
@NotBlank | 对字符串类型做非空校验 |
@NotEmpty | 对集合类型做非空校验 |
@Min(value = ) | 数据最小不能小于value |
@Max(value = ) | 数据最大不能大于value |
ValidationMessages.properties:名字不能改变
#UserTbl数据校验
username.notblank=用户姓名不能为空
password.notblank=用户密码不能为空
UserTbl
@NotBlank(message = "{username.notblank}")
private String username;
@NotBlank(message = "{password.notblank}")
@Min(6)
private String password;
PageController:注入要进行数据校验的实体对象,由于SpringMVC会将该对象放入到model中传递,key的名称会使用该对象的驼峰命名规则,即实体对象第一个字母小写,是为了给html页面传递数据校验的数值。
@Controller
public class PageController {
@RequestMapping("/{page}")
public String showPage(@PathVariable String page, UserTbl userTbl){
return page;
}
}
UserController:添加@Validated注解,代表数据校验 ,BindingResult : 一个对象可以进行多个校验信息。
@PostMapping("/addUser")
@Transactional
public String addUser(@Validated UserTbl userTbl, BindingResult result){
if(result.hasErrors()){
List<ObjectError> list = result.getAllErrors();
for (ObjectError error : list){
FieldError fieldError = (FieldError) error;
String fieldname = fieldError.getField();
String msg = fieldError.getDefaultMessage();
System.out.println(fieldname + msg);
}
return "addUser";
}
this.userService.addUser(userTbl);
return "redirect:/user/findAllUsers";
}
addUser.html:需要用 th:errors 标签存储数据校验的信息,同时在属性前面需要指明哪个实体对象。
<form th:action="@{/user/addUser}" th:method="post" class="w-50 p-3">
<div class="form-group">
<label for="exampleInputEmail1">UserNamelabel>
<input type="text" class="form-control" id="exampleInputEmail1" name="username" ><font color="red"><span th:errors="${userTbl.username}"/>font>
div>
<div class="form-group">
<label for="exampleInputPassword1">Passwordlabel>
<input type="password" class="form-control" id="exampleInputPassword1" name="password" ><font color="red"><span th:errors="${userTbl.password}"/>font>
div>
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me outlabel>
div>
<button type="submit" class="btn btn-primary">添加button>
form>
GlobalConfiguration:实现 HandlerExceptionResolver 接口
@Configuration
public class GlobalConfiguration implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
if(e instanceof ConstraintViolationException) {
mv.setViewName("findUser");
}
// 两种方式都可以
// mv.addObject("errors",e.toString());
mv.addObject("errors",e.getMessage().split(":")[1]);
return mv;
}
}
findUser.html:在输入的表单中添加错误的数据校验信息
<span th:text="${errors}"/>