Для работы нужно написать следующее:

ема:

Я пытаюсь использовать максимально возможную автоматическую конфигурацию Spring Boot, чтобы уменьшить код пластины котла Я не могу получить коды Spring Validation для автоматического сопоставления с внешними сообщениями messages.properties. Это будет работать только если я добавлю свойLocalValidatorFactoryBean и используйте полное сообщение об ограничении javax.

Цель

Я хочу переопределитьdefaultMessage за@ javax.validation.constraints.NotNull глобально в моем приложениина основе кода Spring Validations.

Первым делом я зарегистрировал этот боб ... действительно ли я должен? Я вижу, что Spring Boot есть, но, похоже, он не соотносится с messages.properties.

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

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

"code": "NotNull",
"codes": [
   "NotNull.user.firstName",
   "NotNull.firstName",
   "NotNull.java.lang.String",
   "NotNull"
],

Но эти коды даже не рассматриваются для ограничения @NotNull. Весенняя документация дляПроверка конверсии намекает на то, что что-то подобное существует, но пока не хватает ничего полезного

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

Вопрос

Как я могу переопределить сообщение по умолчанию об ошибках Spring Validation на основе этих кодов из messages.properties?

Соответствующий build.gradle

springBootVersion = '2.0.0.RELEASE'компиляции ( 'org.springframework.boot: весна-загрузка-стартер-сеть')

SRC / основные / ресурсы / messages.properties:

NotNull.user.firstName=This doesn't work
NotNull.firstName=Or this
NotNull.java.lang.String=This doesn't work either
NotNull=And this doesn't work

javax.validation.constraints.NotNull.message=THIS DOES WORK! But why have codes then?

Spring Auto-Configuration Output, подтверждающий загрузку авто-конфигурации.

   MessageSourceAutoConfiguration matched:
      - ResourceBundle found bundle URL [file:/home/szgaljic/git/jg-github/journey-through-spring/basic-web-validations/build/resources/main/messages.properties] (MessageSourceAutoConfiguration.ResourceBundleCondition)
      - @ConditionalOnMissingBean (types: org.springframework.context.MessageSource; SearchStrategy: current) did not find any beans (OnBeanCondition)

Некоторые другие соответствующие журналы запуска:

2018-03-26 14:32:22.970 TRACE 1093 --- [           main] o.s.beans.CachedIntrospectionResults     : Found bean property 'validationMessageSource' of type [org.springframework.context.MessageSource]

Ограничение валидации:

public class User {
    @NotNull
    private String username;

    @NotNull
    private String firstName;
}

Контроллер только для тестирования:

@RestController
public class UserController {

    @PostMapping("/users")
    public List<ObjectError> testValidation(@Valid @RequestBody User user){
       return null; // null implies no failed validations.. just for testing
    }

}

Не удалось использовать коды

Я пытался комментировать / раскомментировать сообщения в messages.properties, но он будет принимать только значениеjavax.validation.constraints.NotNull.message.

Ответы на вопрос(1)

Ваш ответ на вопрос