前言
在后台开发过程中,我们经常会遇到字段的一些必填项校验,这个时候我们就可以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