ההבדל בין אילוצי @NotNull, @NotEmpty ו- @NotBlank באימות שעועית

1. סקירה כללית

אימות שעועית הוא מפרט אימות סטנדרטי המאפשר לנו לאמת אובייקטים של תחומים בקלות באמצעות קבוצת אילוצים המוצהרים בצורה של הערות.

בעוד שבאופן כללי השימוש ביישומי אימות שעועית כגון Validator Hibernate הוא פשוט למדי, כדאי לבחון כמה הבדלים עדינים - אך רלוונטיים - ביחס לאופן בו מיושמים אילוצים אלה.

במדריך זה, נבחין בהבדלים בין @לא ריק, @לא ריק, ו @NotBlank אילוצים.

2. התלות של Maven

כדי להקים במהירות סביבת עבודה ולבדוק את ההתנהגות של @לא ריק, @לא ריק, ו @NotBlank אילוצים, ראשית עלינו להוסיף את התלות הנדרשת ב- Maven.

במקרה זה נשתמש ב- Hibernate Validator, יישום הפניה לאימות שעועית, לצורך אימות אובייקטי התחום שלנו.

הנה החלק הרלוונטי שלנו pom.xml קוֹבֶץ:

  org.hibernate hibernate-validator 6.0.13.Final org.glassfish javax.el 3.0.0 

אנו נשתמש ב- JUnit ו- AssertJ במבחני היחידות שלנו, לכן דאג לבדוק את הגרסאות העדכניות ביותר של אימות שינה, את יישום ה- EL של GlassFish, את ה- Junit ואת ה- Core ב- Maven Central.

3. ה @לא ריק אילוץ

להתקדם, בואו נשתמש בתמימות UserNotNull מחלקת תחום ומגבילה את שֵׁם שדה עם @לא ריק ביאור:

מחלקה ציבורית UserNotNull {@NotNull (message = "שם לא יכול להיות ריק") שם פרטי מחרוזת; // קונסטרוקטורים / גטרים סטנדרטיים / toString}

עכשיו, עלינו לראות כיצד @לא ריק למעשה עובד מתחת למכסה המנוע.

לשם כך, בואו ליצור מבחן יחידה פשוט לכיתה ולאמת כמה מקרים שלו:

@BeforeClass חלל סטטי ציבורי setupValidatorInstance () {validator = Validation.buildDefaultValidatorFactory (). GetValidator (); } @Test ציבורי בטל כאשר NotNullName_thenNoConstraintViolations () {UserNotNull user = UserNotNull new ("John"); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (0); } @Test ציבורי בטל כאשר NullName_thenOneConstraintViolation () {UserNotNull user = UserNotNull new (null); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (1); } @Test ציבורי בטל כאשרEmptyName_thenNoConstraintViolations () {UserNotNull user = UserNotNull new (""); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (0); } 

כצפוי, @לא ריק אילוץ לא יאפשר ערכי null עבור השדות / ים המוגבלים. למרות זאת, השדות יכולים להיות ריקים.

כדי להבין זאת טוב יותר, בואו נסתכל על NotNullValidator מעמד' isValid () שיטה, אשר @לא ריק שימושים באילוץ. יישום השיטה הוא ממש טריוויאלי:

ציבור בוליאני isValid (אובייקט אובייקט) {אובייקט החזרה! = null; }

כפי שמוצג לעיל, שדה (למשל CharSequence, אוסף, מַפָּה, אוֹ מַעֲרָך) מוגבלת עם @לא ריק חייב להיות לא אפס. ערך ריק, לעומת זאת, חוקי לחלוטין.

4. ה @לא ריק אילוץ

עכשיו, בואו נשתמש בדוגמה UserNotEmpty להשתמש בכיתה @לא ריק אילוץ:

מחלקה ציבורית UserNotEmpty {@NotEmpty (message = "שם לא יכול להיות ריק") שם מחרוזת פרטי; // קונסטרוקטורים / גטרים סטנדרטיים / toString}

עם הכיתה במקום, בואו נבדוק את זה על ידי הקצאת ערכים שונים ל- שֵׁם שדה:

@ מבחן ציבורי בטל כאשר NotEmptyName_thenNoConstraintViolations () {UserNotEmpty user = UserNotEmpty new ("John"); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (0); } @Test ציבורי בטל כאשרEmptyName_thenOneConstraintViolation () {UserNotEmpty user = UserNotEmpty new (""); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (1); } @Test ציבורי בטל כאשר NullName_thenOneConstraintViolation () {UserNotEmpty user = UserNotEmpty new (null); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (1); }

ה @לא ריק ההערה עושה שימוש ב- @לא ריק מעמד' isValid () יישום ובודק בנוסף כי הגודל / אורך של האובייקט שסופק (כמובן, זה משתנה בהתאם לסוג האובייקט המאומת) גדול מאפס.

בְּקִצוּר נִמרָץ, פירוש הדבר ששדה (למשל CharSequence, אוסף, מַפָּה, אוֹ מַעֲרָך) מוגבלת עם @לא ריק חייב להיות לא אפס וגודלו / אורכו חייבים להיות גדולים מאפס.

בנוסף, אנו יכולים להיות מגבילים עוד יותר אם אנו משתמשים ב- @לא ריק ביאור בשילוב עם @גודל.

בכך, אנו אוכפים כי ערכי הגודל המינימלי והמקסימלי של האובייקט הם בטווח המינימום / המקסימלי שצוין:

@NotEmpty (message = "השם עשוי להיות ריק") @Size (min = 2, max = 32, message = "השם חייב להיות באורך של 2 עד 32 תווים") שם מחרוזת פרטי; 

5. ה @NotBlank אילוץ

באופן דומה, אנו יכולים להגביל שדה כיתתי עם ה- @NotBlank ביאור:

מחלקה ציבורית UserNotBlank {@NotBlank (message = "השם עשוי להיות ריק") שם מחרוזת פרטי; // קונסטרוקטורים / גטרים סטנדרטיים / toString}

באותו אופן, אנו יכולים ליישם מבחן יחידה כדי להבין כיצד ה- @NotBlank אילוץ עובד:

@Test הציבור בטל כאשר NotBlankName_thenNoConstraintViolations () {UserNotBlank user = UserNotBlank new ("John"); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (0); } @Test ציבורי בטל כאשרBlankName_thenOneConstraintViolation () {UserNotBlank user = UserNotBlank new (""); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (1); } @Test ציבורי בטל כאשרEmptyName_thenOneConstraintViolation () {UserNotBlank user = UserNotBlank new (""); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (1); } @Test ציבורי בטל כאשר NullName_thenOneConstraintViolation () {UserNotBlank user = UserNotBlank new (null); מַעֲרֶכֶת הפרות = validator.validate (משתמש); assertThat (violations.size ()). isEqualTo (1); } 

ה @NotBlank ההערה משתמשת ב NotBlankValidator class, אשר בודק שאורך הגזוז של רצף הדמויות אינו ריק:

ציבורי בוליאני isValid (CharSequence charSequence, ConstraintValidatorContext constraintValidatorContext) אם (charSequence == null) {return true; } להחזיר charSequence.toString (). לקצץ (). אורך ()> 0; } 

מצחיק מספיק, השיטה מחזירה נכון לערכי null. אז אולי אנו חושבים זאת @NotBlank אמנם מאפשר ערכי אפס, אך למעשה אינו מאפשר זאת.

ה @לא ריק שיטת class 'isValid () נקראת על שם @NotBlank class 'isValid (), ומכאן אוסר על ערכי null.

במילים פשוטות, א חוּט שדה מוגבל עם @NotBlank חייב להיות לא אורך והאורך הקצוץ חייב להיות גדול מאפס.

6. השוואה זו לצד זו

עד כה בדקנו לעומק כיצד ה @לא ריק, @לא ריק, ו @NotBlank אילוצים פועלים בנפרד בשדות הכיתה.

בואו נערוך השוואה מהירה זו לצד זו, כך שנוכל לראות במבט הציפור את הפונקציונליות של המגבלות ולזהות בקלות את ההבדלים ביניהם:

  • @לא ריק: מוגבלת CharSequence, אוסף, מַפָּה, אוֹ מַעֲרָך תקף כל עוד הוא אינו ריק, אך הוא יכול להיות ריק
  • @לא ריק: מוגבלת CharSequence, אוסף, מַפָּה, אוֹ מַעֲרָך תקף כל עוד הוא אינו ריק וגודלו / אורכו גדול מאפס
  • @NotBlank: מוגבלת חוּט תקף כל עוד זה לא אורך והאורך הקצוץ גדול מאפס

7. מסקנה

במאמר זה, הסתכלנו על לא ריק, @לא ריק, ו @NotBlank אילוצים המיושמים באימות שעועית והדגישו את הדמיון וההבדל ביניהם.

כרגיל, כל דגימות הקוד המוצגות במאמר זה זמינות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found