我正在尝试从属性文件中获取自定义消息,但我不能。 我的配置:
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages/ValidationMessages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setFallbackToSystemLocale(true);
return messageSource;
}
必须有效的类:
public class NewUserDto {
@NotEmpty(message = "{NotEmpty.newUserDto.email}")
private String email;
}
我的属性文件中的值:NotEmpty.newUserDto.email = Some value.
但相反Some value
我得{NotEmpty.newUserDto.email}
,为什么会这样?
答案 0 :(得分:0)
如果我理解正确,你试图从属性文件中注入一个String消息,在其中有一个条目:
NotEmpty.newUserDto.email
并且它有一个值,在bean验证失败的情况下应该充当您的消息错误。
在这种情况下:
首先,使用表达式语言来注入属性。像这样:
@Component
public class NewUserDto {
@Value("${NotEmpty.newUserDto.email}")
private String msg;
@NotEmpty(message = msg)
private String email;
}
不要忘记使用@Component
注释注释您的类并将其转换为bean以执行此@Value
注入。当然,您必须在下一个配置文件中添加:
<context:component-scan base-package="package.to.NewUserDto" />
您可以尝试直接执行此操作:
@Component
public class NewUserDto {
@NotEmpty(message = @Value("${NotEmpty.newUserDto.email}"))
private String email;
}
答案 1 :(得分:0)
如果您使用的是java配置。您可以参考以下示例:
Delcare这样的豆子
public class Employee implements Serializable {
@Email @NotEmpty
private String email;
}
自定义消息位于messages.properties文件
中Email.employee.email=Please provide a valid Email address
此文件已添加到WebMvcConfigurerAdapter
中@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
中找到了这个例子