@Validation校验后端数据

本文详细介绍了Java中使用@Validation进行数据校验的方法,包括基本注解的运用、嵌套类型校验、分组校验及其实现步骤,为开发者提供全面的校验框架指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

百度云下载:https://pan.baidu.com/s/1zxXG_8AChCfIprzxQLDdBA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值