欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot?Validation提示信息國際化配置方式

 更新時(shí)間:2023年02月23日 10:24:50   作者:羅小爬EX  
這篇文章主要介紹了SpringBoot?Validation提示信息國際化配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

引言

之前介紹過Spring Boot Validation的使用及擴(kuò)展

本文在此基礎(chǔ)上重點(diǎn)講解下Spring Boot Validation如何集成國際化。

Spring Boot Validation支持JSR-380(aka. Bean Validation 2.0,part of Jakarta EE and JavaSE)注解,可通過驗(yàn)證注解的message屬性設(shè)置驗(yàn)證錯(cuò)誤提示信息,且每個(gè)驗(yàn)證注解都有默認(rèn)的message配置,例如@NotBlank的message屬性值設(shè)置如下圖:

默認(rèn)的message = "{...}"的形式即指定國際化屬性的名稱,后續(xù)會(huì)根據(jù)語言環(huán)境替換為對(duì)應(yīng)的值,而這些國際化屬性的定義可參見hibernate-validator中的org.hibernate.validator.ValidationMessages.properties等一些列國際化屬性定義:

而我們?cè)趯?shí)際使用過程中,除了可以設(shè)置message="{propName}"的形式來讀取國際化屬性,亦可以直接設(shè)置值message="具體的提示信息",而不明確設(shè)置message則使用之前提到的org.hibernate.validator.ValidationMessages.properties中的默認(rèn)配置。

Spring Boot Validation起初其并不直接支持讀取Spring Boot自身的國際化配置(通過spring.messages進(jìn)行配置),而是需要在resources/ValidationMessages.properties中進(jìn)行配置的國際化屬性才會(huì)生效,而后續(xù)在Spring Boot 2.6+版本才支持Validation與Spring Boot自身的國際化配置相結(jié)合。

接下來結(jié)合Spring Boot 2.5和2.6版本分別介紹下Spring Boot Validation如何集成自定義國際化驗(yàn)證提示信息。

Spring Boot 2.5.x

在Spring Boot 2.5.x版本中,Spring Boot Validation默認(rèn)只支持讀取resources/ValidationMessages.properties系列文件的中的國際化屬性,且中文需要進(jìn)行ASCII轉(zhuǎn)碼才可正確顯示

如下圖:

而就算Spring Boot應(yīng)用亦聲明了自身的國際化配置,但是Spring Boot Validation框架是讀取不到的

例如:

Spring Boot應(yīng)用自身的國際化配置如下圖,但是在驗(yàn)證注解message屬性設(shè)置i18n/messages.properties中的"{propName}"是讀取不到的:

而想要Spring Boot Validation框架和Spring Boot自身使用同樣的國際化配置,則可通過如下方式進(jìn)行配置:

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驗(yàn)證器自定義國際化文件配置<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,
     * 設(shè)置Spring國際化消息源
     */
    @Bean
    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        //僅兼容Spring Boot spring.messages設(shè)置的國際化文件和原h(huán)ibernate-validator的國際化文件
        //不支持resource/ValidationMessages.properties系列
        bean.setValidationMessageSource(this.messageSource);
        return bean;
    }

}

注:

  • 通過上述配置類進(jìn)行配置后,
  • 僅兼容Spring Boot spring.messages設(shè)置的國際化文件和原h(huán)ibernate-validator的國際化文件
  • 不再支持resource/ValidationMessages.properties系列

Spring Boot 2.6.x

翻了Github上Spring Boot框架的Release說明,發(fā)現(xiàn)其在2021-08-20發(fā)布的v2.6.0-M2中提到了支持使用自身國際化MessageSource解析驗(yàn)證提示信息,也就是說Spring Boot 2.6.x版本之后已支持驗(yàn)證注解message屬性引用Spring Boot自身國際化配置。

實(shí)際測(cè)試Spring Boot 2.6.x版本,驗(yàn)證注解message="{propName}"

  • 可以直接讀取通過spring.messages設(shè)置的國際化配置中的屬性(設(shè)置UTF-8編碼后中文可無需ASCII轉(zhuǎn)碼),
  • 同時(shí)亦支持讀取resources/ValidationMessages.properties中的配置(中文需ASCII轉(zhuǎn)碼),
  • 且依舊支持原hibernate-validator的國際化文件。

且讀取優(yōu)先級(jí)依次從上到下,即最上面的優(yōu)先生效。

具體的配置及使用方式見下圖:

Spring Boot 2.6關(guān)于Spring Boot Validation與MessageSource的融合,具體實(shí)現(xiàn)細(xì)節(jié)可參見Release中提到的GitHub Pull Request #17530

參考:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用JSqlParser解析SQL語句應(yīng)用場(chǎng)景

    Java使用JSqlParser解析SQL語句應(yīng)用場(chǎng)景

    JSqlParser是一個(gè)功能全面的Java庫,用于解析SQL語句,支持多種SQL方言,它可以輕松集成到Java項(xiàng)目中,并提供靈活的操作方式,本文介紹Java使用JSqlParser解析SQL語句總結(jié),感興趣的朋友一起看看吧
    2024-09-09
  • java wait()/notify() 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式詳解

    java wait()/notify() 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式詳解

    這篇文章主要介紹了java wait()/notify() 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Hadoop之常用端口號(hào)解讀

    Hadoop之常用端口號(hào)解讀

    這篇文章主要介紹了Hadoop之常用端口號(hào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java實(shí)現(xiàn)文件重命名功能

    java實(shí)現(xiàn)文件重命名功能

    這篇文章主要介紹了java實(shí)現(xiàn)文件重命名功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Java函數(shù)式編程(十一):遍歷目錄

    Java函數(shù)式編程(十一):遍歷目錄

    這篇文章主要介紹了Java函數(shù)式編程(十一):遍歷目錄,本文是系列文章的第11篇,其它文章請(qǐng)參閱本文底部的相關(guān)文章,需要的朋友可以參考下
    2014-09-09
  • JAVA實(shí)現(xiàn)多線程的兩種方法實(shí)例分享

    JAVA實(shí)現(xiàn)多線程的兩種方法實(shí)例分享

    這篇文章介紹了JAVA實(shí)現(xiàn)多線程的兩種方法實(shí)例分享,有需要的朋友可以參考一下
    2013-08-08
  • Java實(shí)現(xiàn)登錄與注冊(cè)頁面

    Java實(shí)現(xiàn)登錄與注冊(cè)頁面

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)登錄與注冊(cè)頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • JDBC建立數(shù)據(jù)庫連接的代碼

    JDBC建立數(shù)據(jù)庫連接的代碼

    這篇文章主要為大家詳細(xì)介紹了JDBC建立數(shù)據(jù)庫連接的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    通過Java程序展示如何來實(shí)現(xiàn)創(chuàng)建模板,并通過郵件合并功能來合并文本數(shù)據(jù)和圖片數(shù)據(jù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • 實(shí)例講解Java的Spring框架中的AOP實(shí)現(xiàn)

    實(shí)例講解Java的Spring框架中的AOP實(shí)現(xiàn)

    這篇文章主要介紹了Java的Spring框架中的AOP實(shí)現(xiàn)實(shí)例,AOP面向切面編程其實(shí)也可以被看作是一個(gè)設(shè)計(jì)模式去規(guī)范項(xiàng)目的結(jié)構(gòu),需要的朋友可以參考下
    2016-04-04

最新評(píng)論