Nie mogę znaleźć streszczenia, które odróżnia tę adnotację od siebie.W Hibernate Validator 4.1+, jaka jest różnica między @NotNull, @NotEmpty i @NotBlank?
Odpowiedz
@NotNull
: The CharSequence, Kolekcja, mapa lub Array obiekt nie jest null, ale może być pusta.
@NotEmpty
: Obiekt CharSequence, Collection, Map lub Array ma wartość null i rozmiar> 0.
@NotBlank
: Łańcuch nie ma wartości null , a przycięta długość jest większa niż zero.
Aby pomóc Ci zrozumieć, przyjrzyjmy się, jak te ograniczenia są zdefiniowane i prowadzone (używam wersji 4.1):
@NotNull
ograniczeniem jest zdefiniowany jako:@Constraint(validatedBy = {NotNullValidator.class})
Ta klasa ma metodę
isValid
zdefiniowaną jako:public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) { return object != null; }
@NotEmpty
ograniczeniem jest zdefiniowany jako:@NotNull @Size(min = 1)
Więc to ograniczenie wykorzystuje się
@NotNull
ograniczenie powyżej, i@Size
którego definicja różni się w zależności od obiektu, ale powinno być samo explanitory.Wreszcie
@NotBlank
ograniczeniem jest zdefiniowany jako:@NotNull @Constraint(validatedBy = {NotBlankValidator.class})
Więc to ograniczenie wykorzystuje również
@NotNull
ograniczenia, ale także ogranicza z klasą NotBlankValidator. Ta klasa maisValid
metodę zdefiniowaną jako:if (charSequence == null) { //curious return true; } return charSequence.toString().trim().length() > 0;
Co ciekawe, ta metoda zwraca true jeśli ciąg jest zerowy, ale fałszywa wtedy i tylko wtedy, gdy długość przyciętego ciąg wynosi 0. Jest ok, że zwraca true, jeśli jest pusty, ponieważ, jak już wspomniałem, definicja
@NotEmpty
wymaga również@NotNull
.
Oto kilka przykładów:
String name = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: falseString name = "";
@NotNull
: prawda
@NotEmpty
: false
@NotBlank
: imię fałszywieString = "„;
@NotNull
: prawda
@NotEmpty
: prawda
@NotBlank
: falseString name = "Great odpowiedź!";
@NotNull
: prawda
@NotEmpty
: prawda
@NotBlank
: prawda
Podobało mi się wyjaśnienie w poniższy link: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: Sprawdza, czy wartość nie jest zerowy, nie zważając na treść
@NotEmpty: Sprawdza, czy wartość nie jest pusta, czy nie. Jeśli ma tylko puste przestrzenie, zezwala na to, że nie jest puste.
@NotBlank: Sprawdza, czy wartość nie jest pusta, czy pusta, najpierw przycinaj ją. Oznacza to, że nie pozwoli to na puste miejsca.
Tak więc, jeśli chcesz sprawdzić, czy pole nie ma wartości NULL, ale także, że nie ma tylko pustych spacji, ale tekst, powinieneś użyć @NotBlank.
- 1. Jaka jest różnica między? : i ||
- 2. Jaka jest różnica między $ i $$?
- 3. Jaka jest różnica między = i: = w mysql?
- 4. Jaka jest różnica między! = I =! w Javie?
- 5. Jaka jest różnica między 'i "w PHP
- 6. Jaka jest różnica między! i !! w yaml?
- 7. jaka jest różnica między @ i @@ w module?
- 8. Jaka jest różnica między * i. * W Matlab?
- 9. Jaka jest różnica między | i || w MATLAB?
- 10. Jaka jest różnica między * i * | * w CSS?
- 11. Hibernate - różnica między adnotacjami i adnotacjami?
- 12. W statystykach hibernacji jaka jest różnica między ładowaniem i pobieraniem
- 13. Jaka jest różnica między JavaBean a POJO?
- 14. Jaka jest różnica między System.Windows.Controls.Control i System.Windows.Forms.Control?
- 15. Jaka jest różnica między asersem i static_assert?
- 16. Jaka jest różnica między PropertyChangeListener i VetoableChangeListener?
- 17. Jaka jest różnica między Ja i Ja?
- 18. Jaka jest różnica między ATL i WTL?
- 19. Jaka jest różnica między FontMetrics.stringWidth() i FontMetrics.getStringBounds()?
- 20. Jaka jest różnica między "CompletionStage" i "CompletableFuture"?
- 21. Jaka jest różnica między CellClick i CellMouseClick?
- 22. Jaka jest różnica między ObjectResult i JsonResult
- 23. Jaka jest różnica między ssize_t i ptrdiff_t?
- 24. Jaka jest różnica między fn i fn *?
- 25. Jaka jest różnica między getMeasuredHeight i getHeight
- 26. Jaka jest różnica między beginTrackingWithTouch i touchBegan?
- 27. Jaka jest różnica między init() i window.init()?
- 28. Jaka jest różnica między WCF i WPF?
- 29. Jaka jest różnica między SQLite i SQL
- 30. Jaka jest różnica między tf.Session() i tf.InteractiveSession()?
Spędziłem trochę czasu, śledząc te informacje na własną rękę, a ja chciałem pomóc innym w czerpaniu korzyści z tego wysiłku. "Aby być krystalicznie czystym, nie wystarczy zapytać i odpowiedzieć na własne pytanie, jest to wyraźnie zalecane". http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –
Moim zdaniem @NotBlank POWINNA zaakceptować wartość null. W niektórych przypadkach możesz zaakceptować wartość null dla pól opcjonalnych, w których puste jest po prostu nieprawidłowe. – tbraun
Zgodziłbym się z tym. Jeśli nie chcesz null, a nie pusty, możesz użyć obu. Ponieważ tak nie jest, możesz napisać własny weryfikator i użyć go zgodnie z oczekiwaniami. –