使用Validated注解和SmartValidator进行字段校验

前言

在后台开发过程中,我们经常会遇到字段的一些必填项校验,这个时候我们就可以spring的Validated注解进行校验

步骤1,获取spring的上下文

@Component
public class SpringContextUtil implements ApplicationContextAware {
    
    

         private static ApplicationContext applicationContext; // Spring应用上下文环境

         /*
          * 实现了ApplicationContextAware 接口,必须实现该方法;
          *通过传递applicationContext参数初始化成员变量applicationContext
          */
         @Override
         public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    
    
               SpringContextUtil.applicationContext = applicationContext;
         }

         public static ApplicationContext getApplicationContext() {
    
    
                return applicationContext;
         }

          @SuppressWarnings("unchecked")
          public static <T> T getBean(String name) throws BeansException {
    
    
                     return (T) applicationContext.getBean(name);
           }

}

步骤2


//定义bean
public class ApplyParams extends Params{
    
    

    @Override
    @NotBlank(message = "标题不能为空")
    @Length(max = 30,message = "标题最多30字")
    public String getTitle() {
    
    
        return super.getTitle();
    }

    @Override
    @NotBlank(message = "目标邮件不能为空")
    public String getTargetEmail() {
    
    
        return super.getTargetEmail();
    }
}

//使用方式1 在controller层使用@Valid注解进行调用
@RequestMapping("/insert")
public String insert (@Valid ApplyParams param, HttpServletRequest request){
    
    
    ....
}

/*使用方式2   使用SmartValidator
@Qualifier("defaultValidator") //默认LocalValidatorFactoryBean
@Autowired
SmartValidator validator;

BindingResult br = new BeanPropertyBindingResult(param,param.getClass().getSimpleName());
   //可以使用@autowired自动注入的方式,也可以使用springcontext上下文进行获取
   //martValidator 的SpringBean初始化时就初始化到IOC容器中. 在使用时,可以直接注入使用
   //  SmartValidator validator = SpringContextUtil.getBean(SmartValidator.class);
validator.validate(param,br);
if(br.hasErrors()){
    String errorMesssage = "参数错误: ";
    for (FieldError fieldError : br.getFieldErrors()) {
        errorMesssage += fieldError.getDefaultMessage() + ", ";
    }
    return ResultPojo.Err(errorMesssage);
}
*/

使用SmartValidator进行校验

使用SmartValidator进行校验更为灵活,因为有时你会根据满足某个条件才进行对应的一个校验
SmartValidator有两个方法:

void validate(Object target, Errors errors); //继承自 Validator
void validate(Object target, Errors errors, Object… validationHints);
各参数

target : 是指需要校验的bean, 例如: ApplyParams
errors : 当校验失败时的错误处理
validationHints : 校验命中的策略,比如分组
SmartValidator 最终还是使用的hibernate-validator来做的参数校验

//引入对应的jar包
	<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.1.0.Final</version>
		</dependency>
		<dependency>
			<groupId>org.apache.bval</groupId>
			<artifactId>bval-jsr303</artifactId>
			<version>0.5</version>
		</dependency>

spring校验注解

https://www.cnblogs.com/zhaoyan001/p/6377413.html
@Null 被注释的元素必须为 null

@NotNull 被注释的元素必须不为 null

@AssertTrue 被注释的元素必须为 true

@AssertFalse 被注释的元素必须为 false

@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max=, min=) 被注释的元素的大小必须在指定的范围内

@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past 被注释的元素必须是一个过去的日期

@Future 被注释的元素必须是一个将来的日期

@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

Hibernate Validator 附加的 constraint

@NotBlank(message =) 验证字符串非null,且长度必须大于0

@Email 被注释的元素必须是电子邮箱地址

@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内

@NotEmpty 被注释的字符串的必须非空

@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

参考

https://my.oschina.net/u/2391658/blog/729414

https://www.liangzl.com/get-article-detail-28869.html

https://blog.csdn.net/zknxx/article/details/52426771

猜你喜欢

转载自blog.csdn.net/hbn1326317071/article/details/88951710