16 Aralık 2018 Pazar

Bean Validation @Valid Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.validation.Valid;
Complex Type Nedir
Composition ilişkisine sahip ve Bean Validation yapan iki sınıf varsa, owner tarafa da @Valid anotasyonu gerekir.

Örnek - Yanlış Kod
Elimizde şöyle bir kod olsun. Burada Address üye alanı Bean Validation anotasyonlarına sahip ancak @Valid ile işaretli olmadığı için null olmayan ancak boş bir Address nesnesi ile doğrulanırsa, exception fırlatılmaz.
public class User {

  @Id
  private String id;

  @NotEmpty
  private String name;

  @NotNull
  private Address address;
}
public class Address {

  @NotEmpty
  private String street;

  @NotEmpty
  private String city;

  @Size(min = 4, max = 6)
  private String postcode;
}
Örnek - Complex Type
List ile birleştirmek için şöyle yaparız.
public class UserAddressesForm {

  @NotEmpty
  private String firstName;

  @NotEmpty
  private String lastName;

  @Valid
  private List<AddressForm> addresses;
  ...
}

public class AddressForm {

  @NotEmpty
  private String customName;
  @NotEmpty
  private String city;
  @NotEmpty
  private String streetAn;
  @NotEmpty
  private String streetHn;
  @NotEmpty
  private String addressCountry;
  @NotEmpty
  private String postCode;
  ...
}
Örnek - Complex Type
Generic kullanarak şöyle yaparız.
public class ParentPojo<T> implements Serializable{
  @NotNull
  private String  cNumber;
  @NotNull
  private String  statusCode;
  @Valid 
  @NotNull 
  T child;
}
Örnek Complex Type
Hibernate @Email ile birleştirerek şöyle yaparız.
@Valid
private List<@Email String> emails = new ArrayList<>();
Örnek
Spring ile birleştirerek şöyle yaparız.
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String addEmployee(@Valid @ModelAttribute("userFrom")User user,
  BindingResult result) {
  if(result.hasErrors()){
    return "User";
  }

  return "success";
}
Örnek
Elimizde bir alanı @NotNull olarak işaretli şöyle olan User nesnesi olsun.
@NotNull(message = "First Name cannot be null")
private String firstName;
Spring ile birleştirerek şöyle yaparız.
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String addUser(@Valid User user, BindingResult result) {

  if (result.hasErrors()) {
    return "errorPage";
  } else {
    return "Done";
  }
}

Hiç yorum yok:

Yorum Gönder