簡體   English   中英

從休眠驗證器重新定義ConstraintViolation

[英]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類中執行從StringPair<Integer, String>的轉換。 這是比您提到的解決方案更干凈的解決方案,但並不能使您擺脫任務的復雜性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM