Перейти к основному содержимому

Пользовательский источник сообщений проверки в Spring Boot

· 3 мин. чтения

1. Обзор

MessageSource — это мощная функция, доступная в приложениях Spring. Это помогает разработчикам приложений обрабатывать различные сложные сценарии с написанием большого количества дополнительного кода, такого как конфигурация для конкретной среды, интернационализация или настраиваемые значения.

Еще одним сценарием может быть изменение сообщений проверки по умолчанию на более удобные/настраиваемые сообщения.

В этом руководстве мы увидим, как настраивать и управлять настраиваемой проверкой MessageSource в приложении с помощью Spring Boot .

2. Зависимости Maven

Начнем с добавления необходимых зависимостей Maven:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Вы можете найти последние версии этих библиотек на Maven Central .

3. Пример пользовательского сообщения проверки

Давайте рассмотрим сценарий, в котором нам нужно разработать приложение, поддерживающее несколько языков. Если пользователь не предоставляет правильные данные в качестве входных данных, мы хотели бы отображать сообщения об ошибках в соответствии с региональными настройками пользователя.

Давайте рассмотрим пример bean-компонента формы входа:

public class LoginForm {

@NotEmpty(message = "{email.notempty}")
@Email
private String email;

@NotNull
private String password;

// standard getter and setters
}

Здесь мы добавили ограничения проверки, которые проверяют, не предоставлено ли электронное письмо вообще или предоставлено, но не соответствует стандартному стилю адреса электронной почты.

Чтобы показать пользовательское и специфичное для локали сообщение, мы можем предоставить заполнитель, как указано для аннотации @NotEmpty .

Свойство email.notempty будет разрешено из файлов свойств с помощью конфигурации MessageSource .

4. Определение компонента MessageSource

Контекст приложения делегирует разрешение сообщения компоненту с точным именем messageSource.

ReloadableResourceBundleMessageSource — это наиболее распространенная реализация MessageSource , которая разрешает сообщения из пакетов ресурсов для разных локалей:

@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource
= new ReloadableResourceBundleMessageSource();

messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}

Здесь важно указать базовое имя , поскольку имена файлов, зависящие от локали, будут разрешены на основе предоставленного имени.

5. Определение LocalValidatorFactoryBean

Чтобы использовать сообщения с пользовательскими именами в файле свойств, например, нам нужно определить LocalValidatorFactoryBean и зарегистрировать messageSource:

@Bean
public LocalValidatorFactoryBean getValidator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}

Однако обратите внимание, что если бы мы уже расширили WebMvcConfigurerAdapter , чтобы избежать игнорирования пользовательского валидатора, нам пришлось бы установить валидатор, переопределив метод getValidator() из родительского класса.

Теперь мы можем определить сообщение свойства, например:

email.notempty=<Custom_Message>”

вместо

«javax.validation.constraints.NotEmpty.message=<Custom_message>»

6. Определение файлов свойств

Последним шагом является создание файла свойств в каталоге src/main/resources с именем, указанным в базовом имени на шаге 4:

# messages.properties
email.notempty=Please provide valid email id.

Здесь мы можем воспользоваться преимуществами интернационализации наряду с этим. Допустим, мы хотим показывать сообщения для французского пользователя на его языке.

В этом случае мы должны добавить еще один файл свойств с именем messages_fr.properties в том же месте (никаких изменений в коде не требуется):

# messages_fr.properties
email.notempty=Veuillez fournir un identifiant de messagerie valide.

7. Заключение

В этой статье мы рассмотрели, как можно изменить сообщения проверки по умолчанию без изменения кода, если конфигурация выполнена правильно заранее.

Наряду с этим мы можем использовать поддержку интернационализации, чтобы сделать приложение более удобным для пользователя.

Как всегда, полный исходный код доступен на GitHub .