IT

Hibernate Validator 4.1+에서는 @NotNull, @NotEmpty 및 @NotBlank의 차이점은 무엇입니까?

itgroup 2022. 10. 18. 21:40
반응형

Hibernate Validator 4.1+에서는 @NotNull, @NotEmpty 및 @NotBlank의 차이점은 무엇입니까?

이 세 가지 주석의 차이를 구별할 수 있는 요약을 찾을 수 없을 것 같습니다.

@NotNull: CharSequence, Collection, Map 또는 Array 개체는 늘이 아니지만 비워 둘 수 있습니다.
@NotEmpty: CharSequence, Collection, Map 또는 Array 객체가 null이 아니라 size > 0입니다.
@NotBlank: 문자열이 null이 아니며 잘라낸 길이가 0보다 큽니다.

이해를 돕기 위해 다음 제약사항이 어떻게 정의되고 수행되는지 살펴보겠습니다(버전 4.1을 사용 중입니다).

  1. @NotNull제약조건은 다음과 같이 정의됩니다.

    @Constraint(validatedBy = {NotNullValidator.class})  
    

    이 클래스에는isValid메서드는 다음과 같이 정의됩니다.

    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
     return object != null;  
    }
    
  2. @NotEmpty제약조건은 다음과 같이 정의됩니다.

    @NotNull  
    @Size(min = 1)    
    

    따라서 이 제약조건은@NotNull의 제약 조건 및 @Size그 정의는 오브젝트에 따라 다르지만 스스로 설명해야 합니다.

  3. 마지막으로,@NotBlank제약조건은 다음과 같이 정의됩니다.

    @NotNull  
    @Constraint(validatedBy = {NotBlankValidator.class})        
    

    따라서 이 제약조건은 또한@NotNull구속조건은 NotBlankValidator 클래스로 구속됩니다.이 클래스에는isValid메서드는 다음과 같이 정의됩니다.

    if ( charSequence == null ) {  //curious 
      return true;   
    }   
    return charSequence.toString().trim().length() > 0;  
    

    흥미롭게도 이 메서드는 문자열이 늘인 경우 true를 반환하고 잘린 문자열의 길이가 0인 경우에만 false를 반환합니다.null일 경우 true를 반환하는 것은 괜찮습니다.왜냐하면 제가 말씀드렸듯이@NotEmpty정의에도 필요@NotNull.

다음은 몇 가지 예입니다.

  1. 문자열 이름 = null;
    @NotNull: false(거짓)
    @NotEmpty: false(거짓)
    @NotBlank: false(거짓)

  2. 문자열 이름 = " ,
    @NotNull:
    @NotEmpty: false(거짓)
    @NotBlank: false(거짓)

  3. 문자열 이름 = ";
    @NotNull:
    @NotEmpty:
    @NotBlank: false(거짓)

  4. 문자열 이름 = "좋은 답변입니다!";
    @NotNull:
    @NotEmpty:
    @NotBlank:

아래 링크의 설명이 마음에 들었습니다.http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/

@NotNull:내용을 무시하고 값이 null이 아닌지 확인합니다.

@Not Empty:값이 null 또는 공백이 아닌지 확인합니다.빈 공간만 있으면 비어 있지 않은 것으로 간주됩니다.

@NotBlank:값이 null 또는 비어 있지 않은지 확인하고 먼저 값을 트리밍합니다.빈 공간만 허락하지 않는다는 뜻입니다.

따라서 필드가 null이 아닌 빈 공간만 있는 것이 아니라 텍스트가 포함되어 있는지 검증하려면 @NotBlank를 사용해야 합니다.

  1. @NotNull:제약된 CharSequence, Collection, Map 또는 Array는 null이 아닌 한 유효하지만 비워둘 수 있습니다.
  2. @NotEmpty:CharSequence, Collection, Map 는 、 Array 이 null 이이이이이이이길 / 0 보보보보보0 보보 。
  3. @NotBlank:구속된 문자열은 null이 아니고 잘린 길이가 0보다 큰 경우에만 유효합니다.

언급URL : https://stackoverflow.com/questions/17137307/in-hibernate-validator-4-1-what-is-the-difference-between-notnull-notempty

반응형