无法在 Spring 引导中在模型级别解析来自属性文件的消息
Unable to resolved messages from properties file at model level in Spring Boot
我已经完成了 URL:https://www.mkyong.com/spring/spring-propertysources-example/ 但在我的案例中没有找到任何工作。
我的模型 class 中有以下字段,但针对 length.validation.status
的消息未被替换。
我正在使用 Spring 引导 v2.1.5.RELEASE
项目和
@SafeHtml(whitelistType = WhiteListType.NONE, message = "{html.validation.status}")
@Length(max = ResourceSize.MAX_STATUS, message = "{length.validation.status}")
private String status;
代码:
@Configuration
@PropertySource("classpath:messages.properties")
@ConfigurationProperties
public class AppConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
messages.properties
html.validation.intervention=Intervention
html.validation.status=Status
EDIT-1:
我设置了下面的,但是还是不行。
spring:
application:
name: Program Catalog
# Mongo DB details
data:
mongodb:
database: XX
host: localhost
port: 27017
profiles:
active:
- dev
messages:
basename: messages
fallback-to-system-locale: false
配置属性来源和消息来源不同,所以你不需要使用@PropertySource
或@ConfigurationProperties
。
使用 Spring 引导您 auto-configured 消息源配置有 spring.messages.*
属性。您可以使用 spring.messages.basename
设置消息 属性 文件的名称(和位置)。默认情况下:messages.properties
在你的类路径中。见 docs.
但是,@SafeHtml
是一个 hibernate-validator
注释,不会解析来自 Spring 的消息。相反,默认情况下,这些消息来自类路径根目录中的资源包 ValidationMessages.properties
。参见 docs.
尝试创建一个包含以下内容的文件src/main/resources/ValidationMessages.properties
html.validation.status=Unsafe HTML
应该这样做。
我通过添加以下代码解决了这个问题。但是,如果您想提供索引名称,我们不能在持久化实体时使用相同的代码。
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean getValidator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
我已经完成了 URL:https://www.mkyong.com/spring/spring-propertysources-example/ 但在我的案例中没有找到任何工作。
我的模型 class 中有以下字段,但针对 length.validation.status
的消息未被替换。
我正在使用 Spring 引导 v2.1.5.RELEASE
项目和
@SafeHtml(whitelistType = WhiteListType.NONE, message = "{html.validation.status}")
@Length(max = ResourceSize.MAX_STATUS, message = "{length.validation.status}")
private String status;
代码:
@Configuration
@PropertySource("classpath:messages.properties")
@ConfigurationProperties
public class AppConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
messages.properties
html.validation.intervention=Intervention
html.validation.status=Status
EDIT-1:
我设置了下面的,但是还是不行。
spring:
application:
name: Program Catalog
# Mongo DB details
data:
mongodb:
database: XX
host: localhost
port: 27017
profiles:
active:
- dev
messages:
basename: messages
fallback-to-system-locale: false
配置属性来源和消息来源不同,所以你不需要使用@PropertySource
或@ConfigurationProperties
。
使用 Spring 引导您 auto-configured 消息源配置有 spring.messages.*
属性。您可以使用 spring.messages.basename
设置消息 属性 文件的名称(和位置)。默认情况下:messages.properties
在你的类路径中。见 docs.
但是,@SafeHtml
是一个 hibernate-validator
注释,不会解析来自 Spring 的消息。相反,默认情况下,这些消息来自类路径根目录中的资源包 ValidationMessages.properties
。参见 docs.
尝试创建一个包含以下内容的文件src/main/resources/ValidationMessages.properties
html.validation.status=Unsafe HTML
应该这样做。
我通过添加以下代码解决了这个问题。但是,如果您想提供索引名称,我们不能在持久化实体时使用相同的代码。
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean getValidator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}