26 Aralık 2023 Salı

Bean Validation @GroupSequence Anotasyonu

Örnek
Elimizde şöyle bir kod olsun
public class SampleRequest {

  @NotNull
  LocalDate startDate;

  @NotNull
  LocalDate 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);
  }
}



Bean Validation @AssertTrue Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.validation.constraints.AssertTrue;
Metodun true döndüğünü kontrol eder. Açıklaması şöyle
data-time fields (@Future, @Past, @FutureOrPresent, @PastOrPresent);
strings (@Email, @Pattern, @Size, @NotEmpty);
iterative objects (@Size, @NotBlank)
numeric values (@Digits, @Min and @Max, @Negative, @Positive)
boolean values (@AssertTrue, @AssertFalse)
objects (@Null, @NotNull, @Valid)

Örnek
Şöyle yaparız.
@AssertTrue(message = "name checked")
public boolean isNameCheck() { 
  if (this.name == null || (this.name != null && this.name.length() <= 5)) { 
    return true; 
  }

  return false;
}
Örnek
Şöyle yaparız.
@AssertTrue(message = "Your custom message")
public boolean checkValidation(){
  if(site != null && app != null){
    return false;
  }

  //add ur required condition here. if ur request valid return true.
  return false;
}

Bean Validation @FutureOrPresent Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.validation.constraints.FutureOrPresent;
Şu tipler ile kullanılabilir
java.util.Date
java.util.Calendar
java.time.Instant
java.time.LocalDate
java.time.LocalDateTime
java.time.LocalTime
java.time.MonthDay
java.time.OffsetDateTime
java.time.OffsetTime
java.time.Year
java.time.YearMonth
java.time.ZonedDateTime
java.time.chrono.HijrahDate
java.time.chrono.JapaneseDate
java.time.chrono.MinguoDate
java.time.chrono.ThaiBuddhistDate

Örnek - Date
Şöyle yaparız.
@NotNull
@FutureOrPresent
@Column(name = "meeting_start")
private Date start;

Bean Validation API @Future Anotasyonu

Giriş
Açıklaması şöyle
data-time fields (@Future, @Past, @FutureOrPresent, @PastOrPresent);
strings (@Email, @Pattern, @Size, @NotEmpty);
iterative objects (@Size, @NotBlank)
numeric values (@Digits, @Min and @Max, @Negative, @Positive)
boolean values (@AssertTrue, @AssertFalse)
objects (@Null, @NotNull, @Valid)

Bean Validation @GroupSequence Anotasyonu

Örnek Elimizde şöyle bir kod olsun public class SampleRequest {   @NotNull   LocalDate startDate;   @NotNull   LocalDate endDate;   @AssertT...