无法在 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;
}