我怎样才能在@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:我需要那些bean:我现在如何发送切换语言的帖子请求?我尝试添加像?local=de, locale=de, ?lang=de, language=de
这样的get-query参数,但它们都没有工作......
在@M的帮助下。 Deinum上面,这是失踪的和平:
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean(MessageSource messageSource) {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource);
return bean;
}
然后必须发送带有http标头Accept-Language=de
的Web请求。