Java 303/349在结束日期验证之前开始日期

时间:2015-11-23 14:15:30

标签: java validation bean-validation

是否有更好的方法来编写Java验证器,确保开始日期早于结束日期,而不是以下列方式编写类级别ConstraintValidator:

// VALIDATOR IMPLEMENTATION

    public class StartBeforeEndDateValidator implements ConstraintValidator<StartBeforeEndDateValid, Object> {

        // cannot use LocalDate here...
        private String start;
        private String end;

        @Override
        public void initialize(final StartBeforeEndDateValid annotation) {
            start = annotation.start();
            end = annotation.end();

        }

        @Override
        public boolean isValid(final Object bean, final ConstraintValidatorContext context) {
            try {
                final String startDateStr = BeanUtils.getProperty(bean, start);
                final String endDateStr = BeanUtils.getProperty(bean, end);

                final LocalDate startDate = new LocalDate(startDateStr);
                final LocalDate endDate = new LocalDate(endDateStr);

                return !startDate.isAfter(endDate);
            } catch (final Exception e) {
                return false;
            }
        }
    }


// USAGE
    @StartBeforeEndDateValid(start = "startDate", end = "endDate")
    @Entity
    public class MyBean {

        @NotNull
        @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
        private LocalDate startDate;

        @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
        private LocalDate endDate;

        ... 
    }

我真的不喜欢我必须使用反射从bean中提取2个日期对象的事实。不幸的是,验证规范没有指定一种方法来设置你想要从bean验证的值。

0 个答案:

没有答案