1.Spring Validator
简介
Spring Framework 提供了用于校验对象的Validator 接口,在校验过程中,与 Errors 对象配合。校验器可以通过Errors 对象报告校验失败的信息。
实现模式
实现 org.springframework.validation.Validator接口
实现 supports 方法判断是否需要支持校验
当方法返回 false时,视作不予校验
实现 validate 方法,判断 target 参数是否校验合法
当校验非法时,通过Errors 对象返回
实现 MessageCodesResolver 或重用框架实现,完成错误信息编码化
辅助
使用工具类 ValidationUtils , 辅助通用校验逻辑
自定义校验器
/**
* Created by LiHaiNan on 上午 10:52 2018/7/13 0013
*/
@Data
public class Person{
private String id;
private String name;
private String sex;
}
import org.springframework.util.StringUtils;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
/**
* Created by LiHaiNan on 下午 5:59 2018/7/16 0016
*/
public class PersonValidator implements Validator{
//是否支持校验
@Override
public boolean supports(Class<?> clazz) {
return Person.class.isAssignableFrom(clazz);
}
//验证逻辑
@Override
public void validate(Object target, Errors errors) {
Person person=Person.class.cast(target);
if (StringUtils.isEmpty(person.getName())){
errors.reject("person.name.not.null","名字不能为空");
}
}
}
2.Bean Validation(目前常用方式)
常用注解
@Valid
@NotNull
@Null
@Size
@Min
@Max
自定义注解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* describe:
*
* @author LiHaiNan
* @date 下午 6:54 2018/7/17 0017
*/
@Target(value = {ElementType.FIELD,ElementType.METHOD})
@Retention(value= RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {PersonNameValidator.class})
public @interface PersonName {
String message() default "";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
String prefix() default "lihainan-";
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* describe:
*
* @author LiHaiNan
* @date 下午 7:10 2018/7/17 0017
*/
public class PersonNameValidator implements ConstraintValidator<PersonName,String> {
private String prefix;
@Override
public void initialize(PersonName constraintAnnotation) {
prefix=constraintAnnotation.prefix();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return value.startsWith(prefix);
}
}