注解
验证时间格式
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DateTimeValidator.class)
public @interface DateTime {
String message() default "格式错误";
String format() default "yyyy-MM-dd";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class DateTimeValidator implements ConstraintValidator<DateTime, String> {
private DateTime dateTime;
@Override
public void initialize(DateTime dateTime) {
this.dateTime = dateTime;
}
@Override
public boolean isValid(String s, ConstraintValidatorContext context) {
if (StringUtils.isBlank(s)) {
return true;
}
String format = dateTime.format();
if (s.length() != format.length()) {
return false;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
try {
simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
return false;
}
return true;
}
}
输入在List集合范围内的整数数据
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ListIntegerValueValidator.class)
public @interface ListIntegerValue {
@OverridesAttribute(constraint = Min.class, name = "value") long min() default 0;
@OverridesAttribute(constraint = Max.class, name = "value") long max() default Long.MAX_VALUE;
@OverridesAttribute(constraint = Max.class, name = "value") long regular() default Long.MAX_VALUE;
String message() default "不在要求范围之内";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class ListIntegerValueValidator implements ConstraintValidator<ListIntegerValue, List<Integer>> {
private ListIntegerValue listIntegerValue;
@Override
public void initialize(ListIntegerValue listIntegerValue) {
this.listIntegerValue = listIntegerValue;
}
@Override
public boolean isValid(List<Integer> integerList, ConstraintValidatorContext context) {
if (integerList == null) {
return true;
}
try {
for (Integer i : integerList) {
if ((i >= listIntegerValue.min() && i <= listIntegerValue.max()) || i == listIntegerValue.regular()) {
return true;
}else{
return false;
}
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
输入在List集合范围内的字符串
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = StringSeriesValidator.class)
public @interface StringSeries {
String[] list();
String message() default "无效的数据";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class StringSeriesValidator implements ConstraintValidator<StringSeries, String> {
private StringSeries series;
@Override
public void initialize(StringSeries series) {
this.series = series;
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null || series.list().length <= 0) {
return true;
}
StringBuilder message = new StringBuilder();
for (String str : series.list()) {
if (value.equals(str)) {
return true;
}
if (message.length() > 0) {
message.append(",");
}
message.append(str);
}
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("数据不在{" + message + "}集合内").addConstraintViolation();
return false;
}
}
输入在一定范围内的整数
```java
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IntegerSeriesValidator.class)
public @interface IntegerSeries {
int[] list();
String message() default "无效的数据";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class IntegerSeriesValidator implements ConstraintValidator<IntegerSeries, Integer> {
private IntegerSeries series;
@Override
public void initialize(IntegerSeries series) {
this.series = series;
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
if (value == null || series.list().length <= 0) {
return true;
}
StringBuilder message = new StringBuilder();
for (int i : series.list()) {
if (value == i) {
return true;
}
if (message.length() > 0) {
message.append(",");
}
message.append(i);
}
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("数据不在{" + message + "}集合内").addConstraintViolation();
return false;
}
}