Spring Boot Validation支援JSR-380(aka. Bean Validation 2.0,part of Jakarta EE and JavaSE)註解,可透過驗證註解的message屬性設定驗證錯誤提示訊息,且每個驗證註解都有預設的message設定,例如@NotBlank
的message屬性值設定如下圖:
#預設的message = "{...}"
的形式即指定國際化屬性的名稱,後續會根據語言環境替換為對應的值,而這些國際化屬性的定義可參見hibernate-validator
中的org.hibernate.validator. ValidationMessages.properties
等一些列國際化屬性定義:
而我們在實際使用過程中,除了可以設定message="{propName}"
的形式來讀取國際化屬性,也可以直接設定值message="具體的提示訊息",而不明確設定message則使用先前提到的org.hibernate.validator.ValidationMessages.properties
中的預設配置。
Spring Boot Validation起初其並不直接支援讀取Spring Boot自身的國際化配置(透過spring.messages進行配置),而是需要在resources/ValidationMessages. properties中進行配置的國際化屬性才會生效,而後續在Spring Boot 2.6 版本才支援Validation與Spring Boot本身的國際化配置結合。
接下來結合Spring Boot 2.5和2.6版本分別介紹下Spring Boot Validation如何整合自訂國際化驗證提示資訊。
Spring Boot 2.5.x
在Spring Boot 2.5.x版本中,Spring Boot Validation預設只支援讀取resources/ValidationMessages.properties
系列檔案的中的國際化屬性,且中文需要進行ASCII轉碼才可正確顯示
如下圖:
#而就算Spring Boot應用亦聲明了自身的國際化配置,但是Spring Boot Validation框架是讀取不到的
例如:
Spring Boot應用自身的國際化配置如下圖,但是在驗證註解message屬性設定i18n/messages.properties中的"{propName}"
是讀取不到的:
#而想要Spring Boot Validation框架和Spring Boot自身使用同樣的國際化配置,則可透過以下方式進行配置:
import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.validation.Validator; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * Spring Web验证器自定义国际化文件配置<br/> * 注:适用于Spring Boot 2.5.* * * @author luohq * @date 2022-05-21 */ @Configuration public class WebValidationConfig implements WebMvcConfigurer { /** * 国际化消息源 */ private MessageSource messageSource; public WebValidationConfig(MessageSource messageSource) { //注入Spring Boot国际化消息源(需通过spring.messages明确指定) this.messageSource = messageSource; } /** * 使用自定义LocalValidatorFactoryBean, * 设置Spring国际化消息源 */ @Bean @Override public Validator getValidator() { LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean(); //仅兼容Spring Boot spring.messages设置的国际化文件和原hibernate-validator的国际化文件 //不支持resource/ValidationMessages.properties系列 bean.setValidationMessageSource(this.messageSource); return bean; } }
#註:
#透過上述配置類別進行配置後,
僅相容於Spring Boot spring.messages設定的國際化檔案和原hibernate-validator的國際化檔案
不再支援resource/ValidationMessages.properties系列
Spring Boot 2.6.x
翻了Github上Spring Boot框架的Release說明,發現其在2021-08-20發布的v2.6.0-M2中提到了支援使用自身國際化MessageSource解析驗證提示訊息,也就是說Spring Boot 2.6.x版本之後已支援驗證註解message屬性引用Spring Boot自身國際化配置。
實際測試Spring Boot 2.6.x版本,驗證註解message="{propName}"
:
可以直接讀取透過
spring.messages
設定的國際化配置中的屬性(設定UTF-8編碼後中文可無需ASCII轉碼),同時也支援讀取
resources
/ValidationMessages.properties
中的設定(中文需ASCII轉碼),- ##且依舊支援原
hibernate-validator
的國際化文件。
以上是SpringBoot Validation提示訊息國際化如何配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),