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

Настраиваемый источник сообщений проверки в Spring Boot

1. обзор

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

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

В этом руководствеwe’ll see how to configure and manage custom validation MessageSource in the application using Spring Boot.

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

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


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.boot
    spring-boot-starter-validation

Вы можете найти последние версии этих библиотек на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. Defining the MessageSource  * Бин *

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

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

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

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

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

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 = »

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

Последним шагом является создание файла свойств в каталогеsrc/main/resources с именем, указанным вbasename на шаге 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. Заключение

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

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

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