如何在@RestController
约束下设置spring 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请求。关于java - 如何在java.validation约束上使用Spring RestController?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55220453/