Spring Boot Validation은 JSR-380(Jakarta EE 및 JavaSE의 일부인 Bean Validation 2.0) 주석을 지원합니다. 검증 오류 메시지는 검증 주석의 메시지 속성을 통해 설정할 수 있으며 각 검증 주석에는 기본 메시지 구성이 있습니다. @NotBlank
의 메시지 속성 값은 아래와 같이 설정됩니다. @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 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系列
翻了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
message = "{...}"
는 국제화 속성의 이름을 지정하며, 이는 다음으로 대체됩니다. 이러한 국제화 속성의 값은 hibernate-validator
및 org.hibernate.validator.ValidationMessages.properties:
실제로 사용하고 있습니다. 이 과정에서 국제화 속성을 읽기 위해 message="{propName}"
형식을 설정하는 것 외에도 message="특정 프롬프트 값을 직접 설정할 수도 있습니다. information". 메시지를 명시적으로 설정하지 않는 경우 앞서 언급한 org.hibernate.validator.ValidationMessages.properties
의 기본 구성을 사용합니다.
Spring 부팅 유효성 검사 처음에는 Spring Boot의 자체 국제화 구성(spring.messages를 통해 구성) 읽기를 직접 지원하지 않았지만 resources/ValidationMessages.properties에서 구성해야 하는 국제화 속성은 나중에 Spring Boot 2.6에서만 적용됩니다. 버전 +는 유효성 검사와 Spring Boot의 자체 국제 구성 조합을 지원합니다.
다음으로 Spring Boot Validation이 Spring Boot 2.5 및 2.6 버전과 함께 사용자 정의 국제 검증 프롬프트 정보를 통합하는 방법을 소개하겠습니다.
Spring Boot 2.5.x
Spring Boot 2.5.x 버전에서 Spring Boot 유효성 검사는 기본 속성으로 resources/ValidationMessages.properties
파일 시리즈를 읽을 때 국제화만 지원합니다. 중국어를 올바르게 표시하려면 ASCII 트랜스코딩이 필요합니다🎜🎜아래와 같이:🎜🎜 🎜🎜Spring Boot 애플리케이션이 자체 국제화 구성을 선언하더라도 Spring Boot 유효성 검사 프레임워크는 이를 읽을 수 없습니다.🎜🎜예: 🎜🎜Spring Boot 애플리케이션 자체 국제화 구성은 다음과 같습니다. 아래와 같이 표시되지만 확인 주석 메시지 속성 설정 i18n/messages.properties의 "{propName}"
를 읽을 수 없습니다: 🎜🎜🎜🎜그리고 Spring Boot 자체와 동일한 Spring Boot 유효성 검사 프레임워크를 사용하고 싶습니다. 국제 구성은 다음과 같습니다. 🎜rrreee🎜참고: 🎜
- 🎜위 구성 클래스를 통해 구성한 후 🎜🎜
- 🎜만 호환됩니다. Spring Boot spring.messages에 의해 설정된 국제화 파일과 원본 hibernate-validator🎜🎜
- 🎜더 이상 자원/ValidationMessages.properties 시리즈🎜🎜🎜
Spring Boot 2.6.x를 지원하지 않습니다. h3>🎜 Github에서 Spring Boot 프레임워크의 릴리스 지침을 확인한 결과 2021-08-20에 릴리스된 v2.6.0-M2에서 자체 국제화된 MessageSource를 사용하여 확인 프롬프트 정보를 구문 분석하는 지원을 언급한 것을 발견했습니다. Spring Boot 2.6.x 이상에서는 Spring Boot의 자체 국제 구성을 참조하기 위한 확인 주석 메시지 속성을 지원한다고 합니다. 🎜🎜🎜🎜실제 Spring Boot 2.6.x 버전 테스트, 확인 주석 message="{propName}"
: 🎜
- 🎜
spring.메시지로 설정된 국제화 구성의 속성
(중국어는 UTF-8 인코딩 설정 후 ASCII 트랜스코딩이 필요하지 않음), 🎜🎜
- 🎜
리소스
/ValidationMessages.properties
의 구성(중국어에는 ASCII 트랜스코딩 필요), 🎜🎜
- 🎜 원본
hibernate-validator
의 국제화 파일을 계속 지원합니다. 🎜🎜🎜🎜그리고 읽기 우선순위는 위에서 아래로, 즉 상위 항목이 먼저 적용됩니다. 🎜🎜특정 구성 및 사용법은 아래 그림을 참조하세요. 🎜🎜🎜🎜🎜Spring Boot 2.6 Spring Boot Validation 및 MessageSource 통합과 관련하여 특정 구현 세부 정보는 릴리스에 언급된 GitHub Pull Request #17530에서 찾을 수 있습니다. 🎜🎜🎜🎜
위 내용은 SpringBoot 검증 프롬프트 정보 국제화를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!