【问题标题】:Date Attribute Validation, End Date must be greater than start date -Spring Boot日期属性验证,结束日期必须大于开始日期-Spring Boot
【发布时间】:2018-12-20 08:53:50
【问题描述】:

我需要检查结束日期是否大于背面的开始日期。 我已经阅读了有关验证器的信息,但我不知道如何使用它们,我想知道是否还有另一种选择(将约束添加为 Annotation Maybe ..)。

任何推荐或建议都会很棒!

【问题讨论】:

  • 商店开始和结束时间在哪里?它存储在一个 DTO 上吗?
  • 是的,它们属于同一个实体
  • 为什么不自己实现呢?您可以使用 validate(T t) 方法创建 Interface Validator。验证后返回 boolean 或 List 或 throw new excpetion
  • 这似乎是最好的解决方案,我现在正在努力,如果您有任何好的验证器示例,那将非常有帮助
  • 请参考这个answer。希望对您有所帮助。

标签: java validation datetime spring-boot


【解决方案1】:

没有用于此类验证的 spring 注释。 你可以自己做,就像在 setter 上的普通老生常谈一样:

public class MyEntity... {
    ...
    private LocalDate shouldBeAfterNow;

    public void setShouldBeAfterNow(LocalDate date) {
         if(date.isAfter(LocalDate.now())) {
           shouldBeAfterNow = date;
         } else {
           throw new SomeException(); // or
         }
    }
    ...
}

但请考虑您是否真的需要在实体中进行此类验证。也许有一个更好的地方......也许是服务或映射器类。

【讨论】:

    【解决方案2】:

    在您的方法中,您可以使用断言: Assert.isTrue(endDate.isAfter(startDate),"Custom message");

    自定义消息是可选的。

    【讨论】:

    • 你好,你是指哪种方法?我只有属性并想检查它们
    • 我假设您创建了一个以日期为参数的对象?在创建对象之前(或在构造函数中),您可以添加它来检查日期。如果您可以提供一些示例代码,我可以更好地了解您的情况:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多