Как я могу 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
, но ни один из них не работал ...