![](/img/trans.png)
[英]Merging ConstraintViolation set from validator.validate with ConstraintValidatorContext
[英]Redefine ConstraintViolation from hibernate validator
我們將Java EE 7與Wildfly 10.0一起使用。 在過去的幾天中,我正在學習Java EE 7規范中包含的許多Bean驗證功能。 聽起來很有希望,因為我看到了使用批注進行驗證的許多優勢,包括可重用性和更簡潔的代碼。
但是,javax.validation.Validator返回一組ConstraintViolations。
現在,ConstraintViolation附加了一條消息,您可以使用getMesssage()
從中獲取消息。 消息的類型是字符串。
但是,對於錯誤處理,我們使用我們創建的自定義類型,稱為Pair<int, String>
,以將包括錯誤代碼和消息的消息返回給客戶端。
這是我們的配對看起來的示例:
public static final Pair<Integer, String> NAME_VALIDATION_ERROR = new Pair<Integer, String>(
201, "Name must contain only letters");
現在,所有這些都在一個名為ErrorStrings的類中,並且易於使用,因為該類包含靜態方法,並且在您開始鍵入ErrorStrings.
自動完成功能為您提供可以使用的錯誤對的名稱。 例如NAME_VALIDATION_ERROR
。
因此,將Pair<int, String>
到ConstraintViolation
的最簡單方法是什么,以便可以將其用於將響應返回給客戶端,而不會增加代碼的復雜性。
我想在ErrorStrings
類中添加Hashmap<String, Pair<int, String>>
,並使用ConstraintViolation
定義的message
作為鍵,但是那樣會增加該類的復雜性,因為您必須更改對和您想要更改或添加一些錯誤時的哈希圖。
我正在使用休眠驗證器,這是Jave EE的默認實現,但我願意使用任何其他實現。 我想知道最簡單的方法,重新定義ConstraintViolation
以便它具有Pair<int, String>
。
我知道的“最簡單”的方法是,您應該創建自己的自定義ConstraintViolation
,這將引發自定義ConstraintViolation
實現,該實現還可以具有public Pair<Integer, String> getMessagePair()
方法。 但這將更加復雜,因為它將要求您重新實現所做的每個驗證。
我個人將在新的ErrorStringTranslator
類中執行從String
到Pair<Integer, String>
的轉換。 這是比您提到的解決方案更干凈的解決方案,但並不能使您擺脫任務的復雜性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.