【问题标题】:Hibernate validation - Grouping for nested classes using @GroupSequenceHibernate 验证 - 使用 @GroupSequence 对嵌套类进行分组
【发布时间】:2019-01-02 16:37:11
【问题描述】:

我有这样一个问题:我的验证分组无法正常工作。 这是我的 BookForm 课程:

@GroupSequence({BookForm.class, NameGroup.class, ReservationGroup.class})
public class BookForm {
    @NotEmpty(message = "Tenant first name should be filled out.", groups = NameGroup.class)
    private String tenantFirstName;

    @NotEmpty(message = "Tenant last name should be filled out.", groups = NameGroup.class)
    private String tenantLastName;

    @Valid
    @NotReserved(message = "Unfortunately, current apartment is already booked for these dates.", groups = ReservationGroup.class)
    private ReservationInfo reservationInfo;
    // getters and setters...
}

这里是 ReservationInfo 类:

@GroupSequence({ReservationInfo.class, DateCorrectnessGroup.class})
public class ReservationInfo {

    private long apartmentId;

    @Pattern(regexp = "^(0[1-9]|[12]\\d|3[01])\\/(0[1-9]|1[0-2])\\/([12]\\d{3})$",
        message = "Incorrect check in date. Please, try to book again.", groups = DateCorrectnessGroup.class)
    private String checkInDate;

    @Pattern(regexp = "^(0[1-9]|[12]\\d|3[01])\\/(0[1-9]|1[0-2])\\/([12]\\d{3})$",
        message = "Incorrect check out date. Please, try to book again.", groups = DateCorrectnessGroup.class)
    private String checkOutDate;
    // getters and setters...
}

我想按这样的顺序验证我的课程:

  1. 验证嵌套类字段 (DateCorrectnessGroup)
  2. 验证名称字段 (NameGroup)
  3. 验证当前日期未被保留 (ReservationGroup)

但是目前我收到 DateCorrectnessGroup 验证错误以及 NameGroup 错误或 ReservationGroup 错误。

DateCorrectnessGroup、NameGroup、ReservationGroup 是空接口。

public interface DateCorrectnessGroup {}
public interface NameGroup {}
public interface ReservationGroup {}

哪里出了问题?

【问题讨论】:

  • 你能发布错误吗?比如,堆栈跟踪?
  • 没有例外。问题是分组不正确。

标签: java spring hibernate validation hibernate-validator


【解决方案1】:

为级联引入一个新的虚拟注释,而不在 reservationInfo 上应用 @NotReserved。假设新的注解是@FooBar(或者,我们可以使用@NotNull吗?)

@GroupSequence({DateCorrectnessGroup.class, NameGroup.class, ReservationGroup.class, BookForm.class})
public class BookForm {

    @NotEmpty(message = "...", groups = NameGroup.class)
    private String tenantFirstName;

    @NotEmpty(message = "...", groups = NameGroup.class)
    private String tenantLastName;

    @Valid
    @FooBar(groups = DateCorrectnessGroup.class)  // Could use @NotNull?
    @NotReserved(message = "...", groups = ReservationGroup.class)
    private ReservationInfo reservationInfo;

    // getters and setters...
}

【讨论】:

  • 不幸的是,不是。问题仍然存在...(1 个错误列表)入住日期不正确。请尝试重新预订。 + 应填写租户名字。 (2 错误列表)错误的入住日期。请尝试重新预订。很遗憾,目前的公寓已在这些日期预订。
  • @MZxFK 尝试从ReservationInfo 中删除@GroupSequence 中的ReservationInfo.class
  • @Minar_Mahmud w/o ReservationInfo.class: javax.validation.GroupDefinitionException: HV000054: container.dto.form.ReservationInfo 必须是重新定义的默认组序列的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2019-05-16
相关资源
最近更新 更多