ホームページ >Java >&#&チュートリアル >SpringBoot Validation プロンプト情報の国際化を構成する方法

SpringBoot Validation プロンプト情報の国際化を構成する方法

PHPz
PHPz転載
2023-05-11 11:43:051418ブラウズ

Spring Boot Validation は、JSR-380 (別名 Bean Validation 2.0、Jakarta EE および JavaSE の一部) アノテーションをサポートしています。検証エラー メッセージは、検証アノテーションの message 属性を通じて設定でき、各検証アノテーションにはデフォルトのメッセージがあります。たとえば、@NotBlank の message 属性値は次のように設定されます:

SpringBoot Validation プロンプト情報の国際化を構成する方法

##Default

message = "{... }" フォームでは国際化属性の名前を指定します。この属性は、ロケールに応じて対応する値に置き換えられます。これらの国際化属性の定義については、org.hibernate.validator を参照してください。 hibernate-validator.ValidationMessages.properties および一連の国際プロパティ定義:

SpringBoot Validation プロンプト情報の国際化を構成する方法

実際の使用プロセスでは、

message の設定に加えて、 ="{propName}" 国際プロパティを読み取るには、値 message="特定のプロンプト情報" を直接設定することもできます。メッセージを明示的に設定しない場合は、前述の org.hibernate を使用します。 validator.ValidationMessages.properties のデフォルト構成。

SpringBoot Validation プロンプト情報の国際化を構成する方法

Spring Boot Validation は、最初は Spring Boot 自身の国際設定 (spring.messages を通じて設定) の読み取りを直接サポートしていませんが、resources/ValidationMessages で設定する必要があります。プロパティで設定されたプロパティが有効になり、検証と Spring Boot 独自の国際化設定の組み合わせが Spring Boot 2.6 でサポートされるようになります。

次に、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 トランスコーディングが必要です

以下に示すように:

SpringBoot Validation プロンプト情報の国際化を構成する方法

Spring Boot アプリケーションでも、独自の国際化構成を宣言します。ただし、Spring Boot Validation フレームワークはそれを読み取ることができません。

例:

Spring Boot アプリケーション自体の国際構成は次のとおりですが、検証アノテーション メッセージ プロパティは i18n/messages に設定されています。 .properties

"{propName}" を読み取ることができません:

SpringBoot Validation プロンプト情報の国際化を構成する方法

そして、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 フレームワークのリリース手順を確認したところ、v2.6.0 で言及されていることがわかりました。 M2 リリース 2021-08-20 検証プロンプト情報を解析するための独自の国際化された MessageSource の使用がサポートされるようになりました。つまり、Spring Boot 2.6.x 以降では、Spring Boot 独自の国際化された構成を参照するための検証アノテーション メッセージ属性がサポートされています。

#実際に Spring Boot 2.6.x バージョンをテストし、アノテーションを確認します SpringBoot Validation プロンプト情報の国際化を構成する方法message="{propName}"

:

国際化構成セットのプロパティは、
    spring.messages
  • を通じて直接読み取ることができます (中国語では、UTF-8 エンコーディングを設定した後に ASCII トランスコーディングは必要ありません)、

  • resources
  • /

    ValidationMessages.properties (中国語は ASCII トランスコーディングが必要)、

    での設定の読み取りもサポートし、オリジナルの国際化も引き続きサポートします
  • hibernate-validator
  • のファイル。

    そして、読み取り優先順位は上から下へ、つまり、上のものが最初に有効になります。
具体的な構成と使用方法を次の図に示します。

Spring Boot 2.6 Spring Boot Validation と MessageSource の統合に関する、具体的な実装の詳細リリース GitHub Pull Request #17530 に記載されています: SpringBoot Validation プロンプト情報の国際化を構成する方法

以上がSpringBoot Validation プロンプト情報の国際化を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。