我在參考下面的方法從BindingResult
:就Spring驗證而言,錯誤代碼和消息代碼之間的區別?
BindingResult.html#resolveMessageCodes(java.lang.String, java.lang.String)
我試圖找出錯誤代碼和消息代碼之間的差。有人可以提供一個例子,特別是可以說明的一個例子:爲什麼對於給定的錯誤代碼可能有幾個消息代碼?
我在參考下面的方法從BindingResult
:就Spring驗證而言,錯誤代碼和消息代碼之間的區別?
BindingResult.html#resolveMessageCodes(java.lang.String, java.lang.String)
我試圖找出錯誤代碼和消息代碼之間的差。有人可以提供一個例子,特別是可以說明的一個例子:爲什麼對於給定的錯誤代碼可能有幾個消息代碼?
由於Web應用程序是國際化的,因此當您拒絕某個對象並希望顯示一條消息時,您不使用硬編碼文本,因爲無論使用什麼語言,它都會顯示相同的內容。
而是指定一個錯誤代碼,稍後將其作爲密鑰從包中檢索正確的消息(現在錯誤代碼是從必須找到正確消息文本的方法角度來看的消息代碼)。
您的錯誤代碼解析爲更多的消息代碼,因爲Spring(基於實現)爲您添加了一些額外的消息代碼。這裏是一個片段from the Spring documentation:
[...]什麼錯誤代碼它註冊是由所使用的MessageCodesResolver將決定。默認情況下,使用DefaultMessageCodesResolver,例如,它不僅會使用您提供的代碼註冊消息,還會使用包含您傳遞給拒絕方法的字段名稱的消息。因此,如果您拒絕使用rejectValue(「age」,「too.darn.old」)的字段,除了too.darn.old代碼外,Spring還會註冊too.darn.old.age和too.darn.old .age.int(所以第一個將包含字段名稱,第二個將包含字段的類型);這是爲了方便開發人員定位錯誤消息等。 [...]
最後一條陳述是,爲了控制顯示給用戶的消息,從通用代碼(例如「需要的值」)到更多特定的上下文(例如,「字段XXX需要值」)。
的javadoc for DefaultMessageCodesResolver
解釋它進一步並給出了一個例子:
例如,代碼 「typeMismatch」,對象名 「用戶」 的情況下,現場 「年齡」:
- 試「 typeMismatch.user.age」
- 嘗試 「typeMismatch.age」
- 嘗試 「typeMismatch.int」
- 嘗試 「typeMismatch」
因此,這可以利用例如分辨率算法,以顯示用於結合如「必需的」和「typeMismatch」錯誤的特定消息:
在對象+場電平(「年齡」域,但僅在「用戶」); 在字段級別(所有「年齡」字段,不管是哪個對象名稱); 或一般級別(所有字段,任何對象)。