java - Hibernate 验证 - 使用 @GroupSequence 对嵌套类进行分组

标签 java spring hibernate validation hibernate-validator

我有这样一个问题:我的验证分组无法正常工作。 这是我的 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):

  1. 验证嵌套类字段 (DateCorrectnessGroup)
  2. 验证名称字段 (NameGroup)
  3. 验证当前日期是否未被预订(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/

相关文章:

java - 重写通用 equals 方法

spring - session 超时后自动重定向到登录页面 - JSP,Spring

java - Spring原型(prototype)转为单例并在另一个类中获取值

java - Bluemix 上的 Web 服务发生 SRVE0207E 错误

java - Swing ListCellRenderer 的功能

java - 将 EditText 的值设置为自己的值,已修改 - 导致卡住

java - 如何在 Spring MVC 中构建动态 URL?

Java hibernate : How to set column varchar to max?

Java Spring MVC + Hibernate 类组成

java - 如何强制*立即*将新记录保存到数据库中?