Elimizde şöyle bir kod olsun
public class SampleRequest {@NotNullLocalDate startDate;@NotNullLocalDate endDate;@AssertTrue(message = "Start date is after the end date")public boolean isEndDateAfterStartDate() {return !endDate.isBefore(startDate);}}
Jakarta Constraint anotasyonları rastgele sırada yani karışık sırada çalışıyor. Bu yüzden endDate alanı null ise @NotNull'dan önce @AssertTrue çalışabilir ve NullPointerException alırız. Bunu önlemek için Jakarta'ya bir sıralama belirtmek gerekir. Bunun için @GroupSequence Anotasyonu kullanılır. Buna Validation Groups deniliyor.
Şöyle yaparız. Önce groups değerine sahip olmayanlar daha sonra da groups olarak DateExtendedValidation değerine sahip olan Constraint anotasyonları çalıştırılır
// introduce the flag interface for group marking
public interface DateExtendedValidation {}
@GroupSequence({SampleRequest.class, DateExtendedValidation.class})
public class SampleRequest {
@NotNull
LocalDate startDate;
@NotNull
LocalDate endDate;
@AssertTrue(message = "Start date is after the end date",
groups = DateExtendedValidation.class)
public boolean isEndDateAfterStartDate() {
return !endDate.isBefore(startDate);
}
}