下面列出了怎么用javax.validation.constraints.Future的API类实例代码及写法,或者点击链接到github查看源代码。
private String resolveDate(Field field) {
Future future = field.getAnnotation(Future.class);
if (future != null) {
return "必须为未来的时间";
}
FutureOrPresent futureOrPresent = field.getAnnotation(FutureOrPresent.class);
if (futureOrPresent != null) {
return "必须为未来或现在的时间";
}
Past past = field.getAnnotation(Past.class);
if (past != null) {
return "必须为过去的时间";
}
PastOrPresent pastOrPresent = field.getAnnotation(PastOrPresent.class);
if (pastOrPresent != null) {
return "必须为过去或现在的时间";
}
return null;
}
protected HibernateValidatorConfiguration getValidatorFactoryConfiguration(Locale locale) {
HibernateValidatorConfiguration configuration = Validation.byProvider(HibernateValidator.class)
.configure()
.clockProvider(new CubaValidationTimeProvider(timeSource))
.traversableResolver(new CubaValidationTraversableResolver(metadata, entityStates))
.messageInterpolator(new CubaValidationMessagesInterpolator(messages, locale));
ConstraintMapping constraintMapping = configuration.createConstraintMapping();
//Hibernate validators doesn't support java.sql.Date.
//Replace standard validators for java.util.Date with support java.sql.Date
registerPastValidators(constraintMapping.constraintDefinition(Past.class));
registerPastOrPresentValidators(constraintMapping.constraintDefinition(PastOrPresent.class));
registerFutureValidators(constraintMapping.constraintDefinition(Future.class));
registerFutureOrPresentValidators(constraintMapping.constraintDefinition(FutureOrPresent.class));
configuration.addMapping(constraintMapping);
return configuration;
}
protected void registerFutureValidators(ConstraintDefinitionContext<Future> context) {
context.includeExistingValidators(false)
.validatedBy(FutureValidatorForCalendar.class)
.validatedBy(CubaFutureValidatorForDate.class)
// Java 8 date/time API validators
.validatedBy(FutureValidatorForHijrahDate.class)
.validatedBy(FutureValidatorForInstant.class)
.validatedBy(FutureValidatorForJapaneseDate.class)
.validatedBy(FutureValidatorForLocalDate.class)
.validatedBy(FutureValidatorForLocalDateTime.class)
.validatedBy(FutureValidatorForLocalTime.class)
.validatedBy(FutureValidatorForMinguoDate.class)
.validatedBy(FutureValidatorForMonthDay.class)
.validatedBy(FutureValidatorForOffsetDateTime.class)
.validatedBy(FutureValidatorForOffsetTime.class)
.validatedBy(FutureValidatorForThaiBuddhistDate.class)
.validatedBy(FutureValidatorForYear.class)
.validatedBy(FutureValidatorForYearMonth.class)
.validatedBy(FutureValidatorForZonedDateTime.class);
}
private static boolean isValidSimpleConstraint(String cName, String field, Object actual, LinkedList<String> err) {
if ("required".equals(cName) && !required().isValid(actual)) {
err.add(Utils.formatMessage("{0} is required.", field));
return false;
} else if (matches(AssertFalse.class, cName) && !falsy().isValid(actual)) {
err.add(Utils.formatMessage("{0} must be false.", field));
return false;
} else if (matches(AssertTrue.class, cName) && !truthy().isValid(actual)) {
err.add(Utils.formatMessage("{0} must be true.", field));
return false;
} else if (matches(Future.class, cName) && !future().isValid(actual)) {
err.add(Utils.formatMessage("{0} must be in the future.", field));
return false;
} else if (matches(Past.class, cName) && !past().isValid(actual)) {
err.add(Utils.formatMessage("{0} must be in the past.", field));
return false;
} else if (matches(URL.class, cName) && !url().isValid(actual)) {
err.add(Utils.formatMessage("{0} is not a valid URL.", field));
return false;
} else if (matches(Email.class, cName) && !email().isValid(actual)) {
err.add(Utils.formatMessage("{0} is not a valid email.", field));
return false;
}
return true;
}
private void appendFutureValidator(SourceWriter w, JField field) {
Future futureAnnotation = field.getAnnotation(Future.class);
if (futureAnnotation != null) {
w.println(", new FutureValidator(\"%s\")", futureAnnotation.message());
}
}
@Override
public void initialize(Future constraintAnnotation) {
}
@Override
public void initialize(Future constraintAnnotation) {
}
public void rentCar(
@NotNull String customer,
@NotNull @Future Date startDate,
@Min(1) int durationInDays) {
//...
}
public void createReservation(@NotNull @Future LocalDate begin, @Min(1) int duration, @NotNull Customer customer) {
// ...
}