簡體   English   中英

Spring MVC + Hibernate驗證器:如何覆蓋/國際化默認錯誤消息?

[英]Spring MVC + Hibernate validator : how can I override/internationalize the default error messages?

我正在開發一個Spring MVC項目,我正在使用Hibernate Validator來驗證表單中的輸入字段。 由於我的項目是基於Maven的,我添加了這個依賴項:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>4.1.0.Final</version>
    </dependency>

表單驗證過程工作正常,但現在,我想覆蓋或國際化默認錯誤消息。

例如,默認情況下,使用@NotEmpty批注將生成消息“可能不為空”。 我如何通過自己的消息替換此消息? 我嘗試了幾種解決方案:

  • 定義一個id為“messageSource”的Spring bean並設置其“basenames”屬性
  • 在項目類路徑中創建ValidationMessages.properties文件

但仍會顯示默認消息...

任何提示? Thx提前。

是的,你可以這樣做。 您可以從屬性文件加載錯誤消息。 但是你需要以正確的格式獲得密鑰。 NotEmpty.ClassName.fieldName=fieldName Can not be empty一樣NotEmpty.ClassName.fieldName=fieldName Can not be empty

您只需在屬性文件中指定確切的類名和屬性名稱即可。 在你的情況下,其他一切看起來都很完美。

對於具有該批注的所有字段,您還可以為特定類型的驗證批注提供常見錯誤消息。 javax.validation.constraints.NotNull=Notnull erro happened!

希望這對你有所幫助。 干杯。

這是一個解釋,您可以在如何找到給定或用於驗證的每個注釋背后的確切屬性名稱。 見下面提到的步驟。

@Size(min = 1, max = 50, message = "Email size should be between 1 and 50")

現在從驗證標記中刪除{message =“電子郵件大小應在1到50之間”}。

執行此操作后,您的注釋將是這樣的。

@Size(min = 1, max = 50)

現在在控制器端調試在提交表單時調用的方法。 下面是我的方法,當用戶點擊提交時,它接收請求。

public static ModelAndView processCustomerLoginRequest(IUserService userService,LoginForm loginForm, 
    HttpServletRequest request, HttpSession session, BindingResult result, String viewType, Map<String, LoginForm> model)

現在將調試點放在方法的第一行並調試參數“result”。

BindingResult result

在dubugging你會在代碼數組中找到這樣的字符串。

Size.loginForm.loginId

現在在屬性文件中定義此字符串,並在該字符串中定義消息。 編譯並執行。 只要不驗證該注釋,就會顯示該消息。

Size.loginForm.loginId=email shouldn't be empty.

基本上spring將自己的字符串作為其屬性文件消息的關鍵。 在上面的關鍵

Size(@Size) = validation annotation name
loginForm = My Class Name
loginId = Property name in LoginForm class.

這種方法的美妙之處在於你將使用Spring Internationalization時運行良好。 它會在語言更改時自動切換消息文件。

暫無
暫無

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

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