Validator的使用
目前程序写的Validator校验存在多个校验当第一个不满足条件还校验其它的问题。
建立Validator
单独建立一个Validator项目,可以方便其它项目引用,而且作为一个单独的公共模块,不影响目前项目的框架,可以直接引用
引入依赖
这块引入依赖最好不要配置依赖版本,使用主项目的版本
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
</dependencies>
建立配置类
public class ValidatorConfiguration {
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
//快速失败返回模式
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
return validatorFactory.getValidator();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor();
postProcessor.setValidator(validator());
return postProcessor;
}
}
建立启动注解类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ValidatorConfiguration.class)
public @interface EnableFormValidator {
}
正式项目使用
引入依赖
<dependency>
<groupId>com.*</groupId>
<artifactId>项目名称</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
启动类加入使用注解
@SpringBootApplication
@EnableFormValidator
public class MycloudSystemApplication {
public static void main(String[] args) {
SpringApplication.run(MycloudSystemApplication.class,args);
}
}
Controller里面配置注解
@PostMapping
@ApiOperation(value = "新增菜单",httpMethod = "POST",tags="新增菜单")
public R add(@Validated @RequestBody MenuReqVO menu)
{
return sysMenuService.insertMenu(menu);
}
bean里面增加注解
当第一个menuName为空时候,就不会再校验menuId不可为空,直接返回,其中message是自定义的返回信息
public class MenuReqVO {
/** 菜单名称 */
@ApiModelProperty("菜单名称")
@NotNull(message = "菜单名称不可为空")
private String menuName;
/** 用户id */
@ApiModelProperty("用户id")
private String userId;
@ApiModelProperty("菜单ID")
@NotNull(message = "菜单ID不可为空")
private Long menuId;
}
常用的Validator注解
@Null 限制必须为null
@NotNull 限制必须不能为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不超过指定大小值的数字
@DecimalMin(value) 限制必须为一个不低于指定大小值的数字
@Digits(integert,fraction) 限制必须为一个小数,且整数部分位数不能超过integer,小数部分位数不能超过fraction
@Futrue 限制必须为一个将来的日期
@Past 限制必须为一个过去的日期
@Max(value) 限制必须为一个不超过指定大小值的数字
@Min(value) 限制必须为一个不低于指定大小值的数字
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须处在max和min的值之间
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0,集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null,且去除首位空格后长度不为0),不同于@NotEmpty,@NotBlank只适用于字符串的校验且在校验时会去除字符串的空格
@Email 验证值是否为邮箱,也可以通过正则表达式和flag指定自定义的email格式
@Length 限制字符串参数长度
@Range 限制数值类型或者字符串在指定范围
@URL 对URL地址进行验证