Tôi dường như không thể tìm thấy bản tóm tắt phân biệt sự khác biệt giữa ba chú thích này.
Tôi dường như không thể tìm thấy bản tóm tắt phân biệt sự khác biệt giữa ba chú thích này.
Câu trả lời:
@NotNull
: Đối tượng CharSequence, Collection, Map hoặc Array không rỗng , nhưng có thể để trống.
@NotEmpty
: Đối tượng CharSequence, Collection, Map hoặc Array không được rỗng và kích thước> 0 .
@NotBlank
: Chuỗi không rỗng và độ dài được cắt nhỏ hơn 0 .
Để giúp bạn hiểu, hãy xem cách các ràng buộc này được định nghĩa và thực hiện (tôi đang sử dụng phiên bản 4.1):
Các @NotNull
hạn chế được định nghĩa là:
@Constraint(validatedBy = {NotNullValidator.class})
Lớp này có một isValid
phương thức được định nghĩa là:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
Các @NotEmpty
hạn chế được định nghĩa là:
@NotNull
@Size(min = 1)
Vì vậy, hạn chế này sử dụng các @NotNull
hạn chế trên, và @Size
có định nghĩa khác nhau dựa trên đối tượng nhưng phải tự explanitory.
Cuối cùng, @NotBlank
ràng buộc được định nghĩa là:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Vì vậy, ràng buộc này cũng sử dụng @NotNull
ràng buộc, nhưng cũng ràng buộc với lớp NotBlankValidator. Lớp này có một isValid
phương thức được định nghĩa là:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Điều thú vị là phương thức này trả về true nếu chuỗi là null, nhưng false nếu và chỉ khi độ dài của chuỗi được cắt bớt là 0. Có thể trả về true nếu nó là null vì như tôi đã đề cập, @NotEmpty
định nghĩa cũng yêu cầu @NotNull
.
Đây là vài ví dụ:
Tên chuỗi = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: false
Tên chuỗi = "";
@NotNull
: true
@NotEmpty
: false
@NotBlank
: false
Tên chuỗi = "";
@NotNull
: true
@NotEmpty
: true
@NotBlank
: false
String name = "Câu trả lời tuyệt vời!";
@NotNull
: true
@NotEmpty
: true
@NotBlank
: true
Tôi thích giải thích trong liên kết dưới đây: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: Kiểm tra xem giá trị có phải là null hay không, bỏ qua nội dung
@NotEmpty: Kiểm tra xem giá trị có rỗng hay không. Nếu nó chỉ có không gian trống, nó sẽ cho phép nó không trống.
@NotBlank: Kiểm tra xem giá trị có rỗng hay không, trước tiên hãy cắt bớt giá trị. Nó có nghĩa là, nó sẽ không chỉ cho phép không gian trống.
Vì vậy, nếu bạn muốn xác thực rằng một trường không phải là giá trị rỗng nhưng cũng không chỉ có các khoảng trống mà còn là văn bản, bạn nên sử dụng @NotBlank.
@NotNull:
CharSequence, Collection, Map hoặc Array bị ràng buộc hợp lệ miễn là nó không rỗng, nhưng nó có thể trống@NotEmpty:
CharSequence, Collection, Map hoặc Array bị ràng buộc có giá trị miễn là nó không rỗng và kích thước / chiều dài của nó lớn hơn 0.@NotBlank:
một Chuỗi bị ràng buộc hợp lệ miễn là nó không rỗng và độ dài được cắt nhỏ hơn 0.