我有这样一个问题:我的验证分组无法正常工作。 这是我的 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...
}
我想按以下顺序验证我的类(class):
- 验证嵌套类字段 (DateCorrectnessGroup)
- 验证名称字段 (NameGroup)
- 验证当前日期是否未被预订(ReservationGroup)
但是目前我收到 DateCorrectnessGroup 验证错误以及 NameGroup 错误或 ReservationGroup 错误。
DateCorrectnessGroup、NameGroup、ReservationGroup 是空接口(interface)。
public interface DateCorrectnessGroup {}
public interface NameGroup {}
public interface ReservationGroup {}
问题出在哪里?
最佳答案
引入一个新的用于级联的虚拟注释,而无需在 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...
}
关于java - Hibernate 验证 - 使用 @GroupSequence 对嵌套类进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54009946/