Sepertinya saya tidak dapat menemukan ringkasan yang membedakan perbedaan antara ketiga anotasi ini.
sumber
Sepertinya saya tidak dapat menemukan ringkasan yang membedakan perbedaan antara ketiga anotasi ini.
@NotNull
: Objek CharSequence, Collection, Map atau Array tidak null , tetapi bisa kosong.
@NotEmpty
: Objek CharSequence, Collection, Map atau Array bukan null dan size> 0 .
@NotBlank
: String tidak nol dan panjang yang dipotong lebih besar dari nol .
Untuk membantu Anda memahami, mari kita lihat bagaimana batasan ini didefinisikan dan dijalankan (saya menggunakan versi 4.1):
The @NotNull
kendala didefinisikan sebagai:
@Constraint(validatedBy = {NotNullValidator.class})
Kelas ini memiliki isValid
metode yang didefinisikan sebagai:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
The @NotEmpty
kendala didefinisikan sebagai:
@NotNull
@Size(min = 1)
Jadi kendala ini menggunakan satu @NotNull
kendala di atas, dan @Size
yang definisinya berbeda berdasarkan pada objek tetapi harus explanitory diri.
Terakhir, @NotBlank
batasan didefinisikan sebagai:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Jadi batasan ini juga menggunakan @NotNull
batasan, tetapi juga batasan dengan kelas NotBlankValidator. Kelas ini memiliki isValid
metode yang didefinisikan sebagai:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Menariknya, metode ini mengembalikan nilai true jika stringnya null, tetapi false jika dan hanya jika panjang string yang dipotong 0. Tidak apa-apa jika ia mengembalikan true jika null karena, seperti yang saya sebutkan, @NotEmpty
definisi juga memerlukan @NotNull
.
Berikut beberapa contohnya:
Nama string = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: false
Nama string = "";
@NotNull
: benar
@NotEmpty
: salah
@NotBlank
: salah
Nama string = "";
@NotNull
: benar
@NotEmpty
: benar
@NotBlank
: salah
String name = "Jawaban bagus!";
@NotNull
: benar
@NotEmpty
: benar
@NotBlank
: benar
ConstraintValidator
dikaitkan dengan penjelasan ini lagi .Saya menyukai penjelasan di tautan di bawah ini: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: Memeriksa apakah nilainya bukan null, mengabaikan konten
@NotEmpty: Memeriksa apakah nilainya tidak nol atau kosong. Jika hanya memiliki ruang kosong, itu akan memungkinkannya sebagai tidak kosong.
@NotBlank: Memeriksa apakah nilainya tidak null atau kosong, terlebih dahulu memotong nilainya. Artinya, tidak hanya ada ruang kosong.
Jadi, jika Anda ingin memvalidasi bahwa suatu bidang tidak null tetapi juga tidak hanya memiliki spasi kosong, tetapi teks, Anda harus menggunakan @NotBlank.
sumber
@NotNull:
CharSequence, Collection, Map, atau Array yang dibatasi valid selama tidak null, tetapi boleh kosong@NotEmpty:
CharSequence, Collection, Map, atau Array yang dibatasi valid selama tidak null dan ukuran / panjangnya lebih besar dari nol.@NotBlank:
String yang dibatasi valid selama tidak null dan panjang yang dipotong lebih besar dari nol.sumber