Как использовать Spring RestController для ограничений java.validation? - PullRequest
0 голосов
/ 18 марта 2019

Как я могу i18n свойство @RestController пружины на javax.validation ограничениях?

Я думал, что могу просто добавить /src/main/resources/messages.properties и messages_de.properties, и тогда spring обнаружит их и включитi18n?Но, похоже, дело не в этом:

@RestController
public void TestController {
       @PostMapping
       public void post(@Valid @RequestBody Person p) {
       }
}

public class Person {
       private String firstname;

       @javax.validation.constraints.NotBlank(message = "{errors.person.lastname}")
       private String lastname;
}

messages.properties:
errors.person.lastname=person should provide a lastname

messages_de.properties:
errors.person.lastname=Person ohne Nachnamen

Проблема: если я сейчас отправлю POST запрос:

{
    "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
    "message": "'lastname': {errors.person.lastname}"
}

Вопрос 1 : могу ли яНеужели нужно сказать Spring явным образом применить i18n следующим образом?Или я могу как-то полагаться на функции автоопределения?

Следующим шагом было добавление следующей конфигурации.Теперь сообщение по умолчанию разрешено правильно.Но нужно ли действительно добавлять это всякий раз, когда я хочу получить проверку i18n?

@Configuration
public class MessageSourceConfig {
    @Bean
    public LocalValidatorFactoryBean localValidatorFactoryBean() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(messageSource());
        return bean;
    }

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource bundle = new ResourceBundleMessageSource();
        bundle.setBasenames("messages");
        return bundle;
    }
}

Вопрос 2 : Мне нужны эти бины: как я могу теперь отправить запрос на публикацию для переключенияязык?Я пытался добавить параметры get-query, такие как ?local=de, locale=de, ?lang=de, language=de, но ни один из них не работал ...

1 Ответ

0 голосов
/ 18 марта 2019

С помощью @M. Deinum выше, это пропавший мир:

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

Затем необходимо отправить веб-запрос с заголовком http Accept-Language=de.

...