1. 程式人生 > >@Validation校驗後端資料

@Validation校驗後端資料

一、@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下載