我想将基于JSR 303规范的验证消息插入单个文件而不是ValidationMessages.properties。只是为了简单。 我已经读过可以设置从WebMvcConfigurerAdapter扩展的配置类:
@Bean(name = "messageSource")
public MessageSource messageSource()
{
ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource();
bean.setBasename("classpath:messages");
bean.setDefaultEncoding("UTF-8");
return bean;
}
@Bean(name = "validator")
public LocalValidatorFactoryBean validator()
{
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
@Override
public Validator getValidator()
{
return validator();
}
其中文件text.properties应用于验证消息。
MAX_SIZE_MESSAGE = You must enter max 20 characters
然后我有实体,其中使用验证消息,例如。
@Size(max = 20, message = "{MAX_SIZE_MESSAGE}")
但是,在运行测试后,Spring Boot无法看到该消息。
有什么问题?必须是只在一个地方可用的配置文件,或者它必须是测试包的一部分吗?
更新30.1 调试后似乎无法识别消息包。我有测试配置文件位于messages.properties文件但未使用。
答案 0 :(得分:0)
Spring还配置了Validator bean。要使用您的实现,请使用@Primary
标记您的bean。
@Configuration
public class MyConfigurerAdapter extends WebMvcConfigurerAdapter {
@Bean
@Primary
public LocalValidatorFactoryBean validator() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:text");
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(messageSource);
return validator;
}
@Override
public Validator getValidator() {
return validator();
}
}
然后你可以注入你创建的验证器,
@Component
public class TestRunner implements CommandLineRunner {
@Autowired
private Validator val;
....
}