Java Bean Validation (JSR303) constraints involving relationship between several bean properties

Viewed 17455

Say I have the following simple java bean:

class MyBean {
   private Date startDate;
   private Date endDate;
   //setter, getters etc...
}

Is there a mechanism in JSR 303 to create a custom validator that validates the constraint that startDate must be before endDate?

It seems to me to be a common use case, yet I cannot find any examples of this kind of multiple property relationsship constraint.

5 Answers

If you're using Hibernate Validator in version 4.1 or later you can use the @ScriptAssert constraint together with a scripting or expression language to express this kind of constraint. Using JavaScript your example would look like this:

 @ScriptAssert(lang = "javascript", script = "_this.startDate.before(_this.endDate)")
 public class CalendarEvent {

      private Date startDate;

      private Date endDate;

      //...
 } 

You can get an even more compact syntax by creating a custom constraint for the script language of your choice:

@JexlAssert("_.startDate < _.endDate")
public class CalendarEvent {

    private Date startDate;

    private Date endDate;

    //...
}
Related