validation 分组校验注解大全及使用详解

JSR303(Bean的校验框架)的注解,在 controller 的方法中验证时(运行时校验属性)使用,如果不合法(校验失败),注解中的提示信息会保存在 result 中。

JSR提供的校验注解:

javax.validation.constraints

注解校验内容
@Null为 null
@NotNull不为 null,可以为空字符串
@AssertTrue为 true
@AssertFalse为 false
@Min(value)数字,最小值 value
@Max(value)数字,最大值 value
@DecimalMin(value)数字,最小值 value
@DecimalMax(value)数字,最大值 value
@Size (max=, min=)集合,长度范围 min ~ max
@Digits(integer, fraction)数字,在 integer 上下浮动不超过 fraction
@Past过去的日期
@Futrue将来的日期
@Pattern(regex=, flag=)符合正则表达式
Hibernate Validator 提供的校验注解:

org.hibernate.validator.constraints

注解校验内容
@NotBlank(message=)字符串,非 null,且 trim() 后长度大于0
@NotEmpty集合,非空
@Email电子邮箱地址
@Length(min=, max=)字符串,长度范围 min ~ max
@Range(min=, max=, message=)指定范围 min ~ max

使用 Validate 分组校验

依赖引入。
pom.xml

<!--jsr 303-->
<dependency>
	<groupId>javax.validation</groupId>
	<artifactId>validation-api</artifactId>
	<version>1.1.0.Final</version>
</dependency>
<!--hibernate validator-->
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>5.2.0.Final</version>
</dependency>

对校验的属性进行设置和分组。使用了 Validate 提供的校验注解的属性,默认的校验分组是 Default.class。
pojo


import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.groups.Default;

@Data
public class UserVo {

	// 默认分组是 Default.class。
	
	/**
	 * 用户新增校验分组(用于新增用户时校验的分组)
	 */
	public interface AddUser extends Default{
		
	}
	
	/**
	 * 用户更新校验分组(用于更新用户时校验的分组)
	 */
	public interface UpdateUser extends Default{
		
	}

	@NotNull(message = "用户id不能为空", group = {Add.class, Update.class})
	private Long id;
	
	@NotBlank(message = "用户姓名不能为空", group = {Update.class})
	private String name;
	
	@NotBlank(message = "用户姓名不能为空", group = {Delete.class})
	private String tel;
	
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	@Future(message = "只能是将来的日期")
	private Date date;
	
	@DecimalMax(value = "10000.0"")
	@DecimalMin(value = "1.0"")
	private Double doubleValue = null;
	
	@Max(value = 100, message = "最大值")
	@Min(value = 1, message = "最小值")
	private Integer integer;
	
	@Range(min = 1, max = 100, message = "范围")
	private Long range;
	
	@Email(message = "邮箱格式错误")
	private String email;
	
	@Size(min = 2, max = 10, message = "字符串长度在2~10")
	private String size;
	
}

controller 方法的参数加上 @Validate 注解后,该方法接收参数时自动对 pojo 中带有验证注解的属性进行相应的校验。不满足验证条件时,进行拦截并返回 message= 定义的信息。
controller

@RestController
@RequestMapping("/validate")
public class TestController {

	/**
	 * 用户登录
	 * 使用默认分组Default.class进行校验
	 */
	@RequestMapping("/login")
	@ResponseBody
	public R add(@RequestBody @Validate UserVo userVo) {
		return R.ok("ok");
	}

	/**
	 * 新增用户
	 * 使用一个自建分组Add.class就行校验
	 */
	@RequestMapping("/add")
	@ResponseBody
	public R add(@RequestBody @Validate(UserVo.Add.class) UserVo userVo) {
		return R.ok("ok");
	}
	
	/**
	 * 更新用户
	 * 使用一个自建分组Update.class进行校验
	 */
	@RequestMapping("/update")
	@ResponseBody
	public R update(@RequestBody @Validate(UserVo.Update.class) UserVo userVo) {
		return R.ok("ok");
	}

	/**
	 * 删除用户
	 * 使用多个自建分组Add.class,Delete.class进行校验
	 */
	@RequestMapping("/delete")
	@ResponseBody
	public R delete(@RequestBody @Validate(Add.class, Delete.class, Default.class) UserVo userVo) {
		return R.ok("ok");
	}
}

@Validate 默认校验默认分组 Default.class,校验时可指定多个分组,使用自定义分组时默认分组的校验不在该校验范围内,可添加 Default.class。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,针对您的问题,我可以给您提供以下的思路: 1. 首先,在进行校验之前,需要在pom.xml文件中添加如下依赖: ```xml <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> ``` 2. 其次,可以使用Java 8中的LocalDateTime类型来表示日期时间。在进行校验时,可以使用javax.validation.constraints中的注解进行校验。例如,如果您需要校验某个LocalDateTime类型的字段是否在当前时间之前,可以使用@Past注解进行校验,示例代码如下: ```java import javax.validation.constraints.Past; import java.time.LocalDateTime; public class Entity { @Past(message = "时间必须在当前时间之前") private LocalDateTime dateTime; } ``` 3. 最后,在进行校验时,需要使用javax.validation.Validation类来创建一个Validator实例,并调用validate方法进行校验。示例代码如下: ```java import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; public class Main { public static void main(String[] args) { Entity entity = new Entity(); entity.setDateTime(LocalDateTime.now().plusDays(1)); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set<ConstraintViolation<Entity>> violations = validator.validate(entity); for (ConstraintViolation<Entity> violation : violations) { System.out.println(violation.getMessage()); } } } ``` 以上是我给您提供的思路,希望对您有所帮助。如果您有任何疑问,请随时向我提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whitemeen太白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值