嵌套注解 @Valid(javax.validation.Valid)
空和非空检查: @Null、@NotNull、@NotBlank、@NotEmpty
注解 |
支持Java类型 |
备注 |
@Null |
Object |
验证元素值为null |
@NotNull |
Object |
验证元素值不能为 null |
@NotBlank |
CharSequence |
验证元素值不为null且移除两边空格后长度大于0 |
@NotEmpty |
CharSequence,Collection,Map and Arrays |
验证元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
Boolean值检查: @AssertTrue、@AssertFalse
注解 |
支持Java类型 |
备注 |
@AssertTrue |
Boolean, boolean |
验证元素值必须为true,否则抛异常 |
@AssertFalse |
Boolean, boolean |
验证元素值必须为flase |
长度检查: @Size、@Length
注解 |
支持Java类型 |
备注 |
@Size |
String,Collection,Map,arrays,CharSequence |
验证元素个数包含在一个区间 |
@Length |
CharSequence |
验证元素值包含在一个区间 |
日期检查: @Future、@FutureOrPresent、@Past、@PastOrPresent
注解 |
支持Java类型 |
备注 |
@Future |
java.util.Date, java.util.Calendar |
验证日期为当前时间之后 |
@FutureOrPresent |
java.util.Date, java.util.Calendar |
验证日期为当前时间或之后一个时间 |
@Past |
java.util.Date, java.util.Calendar |
验证日期为当前时间之前 |
@PastOrPresent |
java.util.Date, java.util.Calendar |
验证日期为当前时间或之前 |
其它检查: @Email、@CreditCardNumber、@URL、@Pattern、@ScriptAssert、@UniqueElements
注解 |
支持Java类型 |
备注 |
@Email |
CharSequence |
验证日期为当前时间之后 |
@CreditCardNumber |
CharSequence |
验证日期为当前时间或之后一个时间 |
@URL |
CharSequence |
验证日期为当前时间之前 |
@Pattern |
CharSequence |
验证日期为当前时间或之前 |
@Valid |
Object |
验证关联对象元素进行递归校验检查 |
@UniqueElements |
Collection |
校验集合中的元素必须保持唯一 否则异常 |
数值检查: @Min、@Max、@Range、@DecimalMin、@DecimalMax、@Digits
注解 |
支持Java类型 |
备注 |
@Min |
BigDecimal, BigInteger, byte, short,int, long,Number. |
检验当前数值大于等于指定值 |
@Max |
CharSequence |
检验当前数值小于等于指定值 |
@Range |
CharSequence |
验证数值为指定值区间范围内 |
@DecimalMin |
CharSequence |
验证数值是否大于等于指定值 |
@DecimalMax |
Object |
验证数值是否小于等于指定值 |
@Digits(integer = 3, fraction = 2) |
|
验证注解的元素值的整数位数和小数位数上限 |
SpringBoot自定义配置
只是为了开启快速失败
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean(Environment environment) {
LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
String[] activeProfiles = environment.getActiveProfiles();
for (String activeProfile : activeProfiles) {
if ("PRO" .equalsIgnoreCase(activeProfile)) {
factoryBean.setValidationPropertyMap(Collections
.singletonMap(HibernateValidatorConfiguration.FAIL_FAST, Boolean.TRUE.toString()));
break;
}
}
return factoryBean;
}
自定义的校验状态(重复注解1.8以下不支持)
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Objects;
/**
* 校验状态
*
* @author kong
*/
@Repeatable(IsValidState.IsValidStates.class)
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IsValidState.ValidStateValidator.class)
public @interface IsValidState {
String message() default "无效状态";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int[] states();
class ValidStateValidator implements ConstraintValidator<IsValidState, Number> {
private IsValidState validState;
@Override
public void initialize(IsValidState validState) {
this.validState = validState;
}
@Override
public boolean isValid(Number value, ConstraintValidatorContext context) {
if (Objects.isNull(value)) {
return true;
}
int[] states = validState.states();
for (int state : states) {
if (Numbers.equalsIgnoreType(state, value)) {
return true;
}
}
return false;
}
}
@Documented
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface IsValidStates {
IsValidState[] value();
}
}