


How to configure SpringBoot Validation prompt information internationalization
Spring Boot Validation supports JSR-380 (aka. Bean Validation 2.0, part of Jakarta EE and JavaSE) annotations. The verification error message can be set through the message attribute of the verification annotation, and each verification annotation has a default message configuration. , for example, the message attribute value of @NotBlank
is set as shown below:
message = "{...}" The form specifies the name of the internationalization attribute, which will be replaced with the corresponding value according to the locale. For the definition of these internationalization attributes, please see
org.hibernate.validator in hibernate-validator
. ValidationMessages.properties and a series of international property definitions:
message="{propName}" to read the international properties, you can also directly set the value message="specific prompt information". If you do not explicitly set the message, use the previously mentioned
org.hibernate.validator.ValidationMessages.properties# Default configuration in ##.
Spring Boot Validation initially does not directly support reading Spring Boot’s own international configuration (configured through spring.messages), but needs to be configured in resources/ValidationMessages. Only the internationalization properties configured in properties will take effect, and the combination of Validation and Spring Boot's own internationalization configuration will be supported later in Spring Boot 2.6.
Next, combined with Spring Boot 2.5 and 2.6 versions, we will introduce how Spring Boot Validation integrates custom international verification prompt information.
Spring Boot 2.5.x
In Spring Boot 2.5.x version, Spring Boot Validation only supports reading the international code in the
resources/ValidationMessages.properties series of files by default. Internationalization attribute, and Chinese requires ASCII transcoding to display correctly as shown below:
Even the Spring Boot application also declares its own internationalization Configuration, but the Spring Boot Validation framework cannot read it
For example:
The international configuration of the Spring Boot application itself is as shown below, but the verification annotation message property is set to i18n/messages.properties The
"{propName}" cannot be read:
and you want the Spring Boot Validation framework and Spring Boot itself to use the same international configuration, you can configure it in the following way:
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; } }
- After configuring through the above configuration class,
- Only compatible with the internationalization files set by Spring Boot spring.messages and the internationalization files of the original hibernate-validator
- The resource/ValidationMessages.properties series is no longer supported
- Spring Boot 2.6.x
I looked through the Release instructions of the Spring Boot framework on Github and found that it was mentioned in v2.6.0-M2 released on 2021-08-20 It is now supported to use its own internationalized MessageSource to parse verification prompt information. That is to say, Spring Boot 2.6.x and later supports the verification annotation message attribute to reference Spring Boot's own internationalized configuration.
Actually test the Spring Boot 2.6.x version and verify the annotation
:
- You can directly read the properties in the internationalization configuration set through
- spring.messages
(Chinese does not require ASCII transcoding after setting UTF-8 encoding),
Also supports reading the configuration in - resources
/
ValidationMessages.properties
(Chinese requires ASCII transcoding), and still supports the original Internationalization files for - hibernate-validator
.
And the read priority is from top to bottom, that is, the top one takes effect first.
The specific configuration and usage are shown in the figure below:
Spring Boot 2.6 Regarding the integration of Spring Boot Validation and MessageSource, the specific implementation details can be found in Release GitHub Pull Request #17530 mentioned:
The above is the detailed content of How to configure SpringBoot Validation prompt information internationalization. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Introduction to Jasypt Jasypt is a java library that allows a developer to add basic encryption functionality to his/her project with minimal effort and does not require a deep understanding of how encryption works. High security for one-way and two-way encryption. , standards-based encryption technology. Encrypt passwords, text, numbers, binaries... Suitable for integration into Spring-based applications, open API, for use with any JCE provider... Add the following dependency: com.github.ulisesbocchiojasypt-spring-boot-starter2. 1.1Jasypt benefits protect our system security. Even if the code is leaked, the data source can be guaranteed.

Usage scenario 1. The order was placed successfully but the payment was not made within 30 minutes. The payment timed out and the order was automatically canceled. 2. The order was signed and no evaluation was conducted for 7 days after signing. If the order times out and is not evaluated, the system defaults to a positive rating. 3. The order is placed successfully. If the merchant does not receive the order for 5 minutes, the order is cancelled. 4. The delivery times out, and push SMS reminder... For scenarios with long delays and low real-time performance, we can Use task scheduling to perform regular polling processing. For example: xxl-job Today we will pick

1. Redis implements distributed lock principle and why distributed locks are needed. Before talking about distributed locks, it is necessary to explain why distributed locks are needed. The opposite of distributed locks is stand-alone locks. When we write multi-threaded programs, we avoid data problems caused by operating a shared variable at the same time. We usually use a lock to mutually exclude the shared variables to ensure the correctness of the shared variables. Its scope of use is in the same process. If there are multiple processes that need to operate a shared resource at the same time, how can they be mutually exclusive? Today's business applications are usually microservice architecture, which also means that one application will deploy multiple processes. If multiple processes need to modify the same row of records in MySQL, in order to avoid dirty data caused by out-of-order operations, distribution needs to be introduced at this time. The style is locked. Want to achieve points

Springboot reads the file, but cannot access the latest development after packaging it into a jar package. There is a situation where springboot cannot read the file after packaging it into a jar package. The reason is that after packaging, the virtual path of the file is invalid and can only be accessed through the stream. Read. The file is under resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

When Springboot+Mybatis-plus does not use SQL statements to perform multi-table adding operations, the problems I encountered are decomposed by simulating thinking in the test environment: Create a BrandDTO object with parameters to simulate passing parameters to the background. We all know that it is extremely difficult to perform multi-table operations in Mybatis-plus. If you do not use tools such as Mybatis-plus-join, you can only configure the corresponding Mapper.xml file and configure The smelly and long ResultMap, and then write the corresponding sql statement. Although this method seems cumbersome, it is highly flexible and allows us to

SpringBoot and SpringMVC are both commonly used frameworks in Java development, but there are some obvious differences between them. This article will explore the features and uses of these two frameworks and compare their differences. First, let's learn about SpringBoot. SpringBoot was developed by the Pivotal team to simplify the creation and deployment of applications based on the Spring framework. It provides a fast, lightweight way to build stand-alone, executable

1. Customize RedisTemplate1.1, RedisAPI default serialization mechanism. The API-based Redis cache implementation uses the RedisTemplate template for data caching operations. Here, open the RedisTemplate class and view the source code information of the class. publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations, BeanClassLoaderAware{//Declare key, Various serialization methods of value, the initial value is empty @NullableprivateRedisSe

In projects, some configuration information is often needed. This information may have different configurations in the test environment and the production environment, and may need to be modified later based on actual business conditions. We cannot hard-code these configurations in the code. It is best to write them in the configuration file. For example, you can write this information in the application.yml file. So, how to get or use this address in the code? There are 2 methods. Method 1: We can get the value corresponding to the key in the configuration file (application.yml) through the ${key} annotated with @Value. This method is suitable for situations where there are relatively few microservices. Method 2: In actual projects, When business is complicated, logic
