@Validation校驗後端資料
阿新 • • 發佈:2018-12-21
一、@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下載