私はこれらの3つの注釈の違いを区別する要約を見つけることができないようです。Hibernate Validator 4.1以降では、@ NotNull、@ NotEmpty、および@ NotBlankの違いは何ですか?
答えて
@NotNull
:のCharSequence、コレクション、地図やArrayオブジェクトは nullではありませんが、は空にすることができます。
@NotEmpty
:CharSequenceオブジェクト、Collectionオブジェクト、MapオブジェクトまたはArrayオブジェクトがnullでないおよびsize> 0です。
@NotBlank
:文字列がヌルでないで、トリムされた長さがゼロより大きい。
@NotNull
制約は次のように定義されます:@Constraint(validatedBy = {NotNullValidator.class})
、あなたが理解するのに役立つのは、これらの制約が定義されているかを調べて(私はバージョン4.1を使用しています)を行うようにする
このクラスは、
isValid
メソッドを以下のように定義しています。public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) { return object != null; }
@NotEmpty
制約は次のように定義される。したがって、この制約がその定義オブジェクトに基づいて異なるが、自己explanitoryなければならない@NotNull
上記制約、と@Size
を使用@NotNull @Size(min = 1)
。したがって、この制約はまた
@NotNull
制約を使用しますが、またNotBlankValidatorクラスに制約@NotNull @Constraint(validatedBy = {NotBlankValidator.class})
:
は最後に、
@NotBlank
制約は次のように定義されます。このクラスは、次のように定義isValid
方法ました:if (charSequence == null) { //curious return true; } return charSequence.toString().trim().length() > 0;
は興味深いことに、このメソッドは文字列がnullの場合はtrueを返しますが、偽の場合とトリミングされた文字列の長さが0である場合にのみ、場合にはtrueを返すこと大丈夫です上記のとおり、
@NotEmpty
の定義には@NotNull
が必要なため、nullです。ここで
は、いくつかの例です:
文字列名= NULL;
@NotNull
:偽
@NotEmpty
:偽
@NotBlank
:偽文字列名= "";
@NotNull
:真
@NotEmpty
:偽
@NotBlank
:偽文字列名= "「;
@NotNull
:真
@NotEmpty
:真
@NotBlank
:偽文字列名= "偉大な答え!"。
@NotNull
:真
@NotEmpty
:真
@NotBlank
:真
私は下のリンクで説明を気に入っ: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull:値かどうかをチェックしますコンテンツを無視してnullではない
@NotEmpty:値がnullでも空でもないかどうかをチェックします。スペースが空白の場合は、空ではないことができます。
@NotBlank:値がヌルでも空でもないかどうかをチェックし、値を最初にトリミングします。それは、ただ空のスペースを許さないことを意味します。
したがって、フィールドがnullではなく、空白だけでなくテキストでもないことを検証する場合は、@ NotBlankを使用する必要があります。
- 1. Hibernate Validatorは@NotNullが常に最初にトリガされますか?
- 2. Hibernate Validator 5.2以降のマップでネストされたリストの検証
- 3. javax validatorとhibernateバリデータはどのように関連していますか?違いは何ですか?
- 4. TensorFlow 1.1以降のKerasとtf.contrib.kerasの違いは何ですか?
- 5. CockroachDBのTEXT、CHAR、およびVARCHARの違いは何ですか?
- 6. SQLのNull、Zero、およびBlankの違いは何ですか?
- 7. JettyのResourceHandler、ServletContextHandler、およびWebAppContextの違いは何ですか?
- 8. DOCUMENT_NODE、DOCUMENT_TYPE_NODE、およびDOCUMENT_FRAGMENT_NODEの違いは何ですか?
- 9. sys.stdout.encoding、locale.getpreferredencoding()、およびsys.getdefaultencoding()の違いは何ですか?
- 10. インデックススキャン、テーブルスキャン、およびインデックスシークの違いは何ですか?
- 11. CIM_USBDevice、CIM_USBHub、およびWin32_USBHubの違いは何ですか?
- 12. window.onload = init();の違いは何ですか?およびwindow.onload = init;
- 13. map、each、およびcollectの違いは何ですか?
- 14. clock()、gettickcount()、QueryPerformanceCounter()、およびQueryPerformanceFrequency()の違いは何ですか?
- 15. db:test:clone、db:test:clone_structure、db:test:load、およびdb:test:prepareの違いは何ですか?
- 16. C_CreateObject、C_GenerateKeyおよびC_GenerateKeyPairの違いは何ですか?
- 17. buildConfigField、resValue、およびmanifestPlaceholdersの違いは何ですか?
- 18. JNIメソッドCallObjectMethod、CallObjectMethodV、およびCallObjectMethodAの違いは何ですか?
- 19. React、Ember、Angular、およびPolymerライブラリの違いは何ですか?
- 20. ランタイム環境、ランタイムエンジン、およびランタイムライブラリの違いは何ですか?
- 21. ラッパー、バインディング、およびポートの違いは何ですか?
- 22. Autodesk Forge:dbId、objectId、およびnodeIdの違いは何ですか?
- 23. ctypes.pointer、ctypes.POINTER、およびctypes.byrefの違いは何ですか?
- 24. Decorator、Wrapper、およびAdapterパターンの違いは何ですか?
- 25. span、input、およびdiv要素の違いは何ですか?
- 26. UserControl、WebControl、RenderedControl、およびCompositeControlの違いは何ですか?
- 27. insert()、insertOne()、およびinsertMany()メソッドの違いは何ですか?
- 28. python.exe、python3.exe、およびpython3.6.exeの違いは何ですか?
- 29. アンドロイドWebViewはアンドロイド4.1以降のChromeエンジンベースですか?
- 30. alloc、malloc、およびalloca - 違いは何ですか?
私はこの情報を自分で追跡するのに時間を費やしました。私は他の人がその努力から恩恵を受けるのを助けたかったのです。 「はっきりするためには、あなた自身の質問に答えるだけでは不十分であり、明示的に奨励されている」 http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –
私の意見では、@ NotBlankはnullを受け入れるべきです。空白が無効なオプションフィールドの場合、nullを受け入れる場合があります。 – tbraun
私はそれに同意します。 nullでなく空でない場合は、両方を使用できます。それが当てはまらないので、あなた自身のバリデーターを書いて、それをあなたが期待する通りに使うことができます。 –