一、@Validation的简单运用
1.引入依赖pom.xml
<!-- 数据校验依赖 hibernate validatorjar包-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
2.在实体类中添加注解
public class User {
private Integer id;
@NotBlank(message = "密码不能为空")
private String password;
@NotBlank(message = "用户名不能为空")
private String username;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
}
3.在Control层添加@Validated注解
@RequestMapping("/login")
public String login(@Validated User user,HttpServletRequest request){
//调用Service层
boolean loginType = userService.login(user.getUsername(),user.getPassword());
//登陆成功
if(loginType){
//如果验证通过,则将用户信息传到前台
request.setAttribute("user",user);
//并跳转到success.jsp页面
return "success";
//登陆失败
}else{
request.setAttribute("message","用户名密码错误!");
return "error";
}
}
二、@Validation的嵌套类型校验
1.UserParam.java
public class UserParam {
@Valid//嵌套的实体类要加@Valid注解
private User user;
public void setUser(User user){
this.user = user;
}
public User getUser(){
return this.user;
}
}
只需在嵌套的User实体类上加@Valid注解就可以了,User实体类和上面的一样,在需要校验的数据上加上相应的注解就可以了
三、@Validation的分组校验
如果同一个类,在不同的使用场景下有不同的校验规则,那么可以使用分组校验,例如登陆时,用户名和密码不能为空,但是,修改密码时,不仅用户名和密码不能为空,还要userId不能为空。
1.在User实体类中增加两个接口
public interface loginParam{
}
public interface updateParam{
}
2.运用groups实现分组功能
@NotNull(groups = {updateParam.class})
private Integer id;
@NotBlank(groups = {loginParam.class,updateParam.class})
private String password;
@NotBlank(groups = {loginParam.class,updateParam.class})
private String username;
3.Control层标明校验的组别
@RequestMapping("/login")
public String login(@Validated({loginParam.class}) User user,HttpServletRequest request){
//调用Service层
boolean loginType = userService.login(user.getUsername(),user.getPassword());
//登陆成功
if(loginType){
//如果验证通过,则将用户信息传到前台
request.setAttribute("user",user);
//并跳转到success.jsp页面
return "success";
//登陆失败
}else{
request.setAttribute("message","用户名密码错误!");
return "error";
}
}
@RequestMapping(value = "/update",method = RequestMethod.POST)
public String update(@RequestBody @Validated({updateParam.class}) UserParam userParam){
System.out.println("已经进入update方法");
User user = userParam.getUser();
Boolean isChange = userService.updatePasswordByUsername(user);//相当于完成修改用户信息的功能
if(isChange) return "success";
else return "error";
}
四、demo下载