You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data REST枚举转换未回退到rest-messages的问题求助

解决Spring Data REST中rest-messages的Locale fallback问题

看起来你已经搞定了业务messages的fallback问题,但Spring Data REST的rest-messages还在顽固地 fallback到系统locale(it-IT)对吧?这是因为Spring Data REST默认会使用它自己的MessageSource配置,而不是直接复用你自定义的那个——除非你明确告诉它要这么做。

下面是两步走的解决方案,适配你的Spring Boot 1.5.8版本:

1. 让自定义MessageSource接管rest-messages的加载

首先,你的自定义MessageSource目前只加载classpath:/i18n/messages开头的文件,而你的rest-messages.properties和rest-messages_it.properties大概率是放在classpath根目录(或其他独立位置),所以得把rest-messages的路径加入到basenames里,让你的MessageSource能接管这些文件的加载:

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    // 加入rest-messages的路径,根据你的实际存放位置调整
    messageSource.setBasenames("classpath:/i18n/messages", "classpath:/rest-messages");
    messageSource.setUseCodeAsDefaultMessage(false);
    messageSource.setCacheSeconds((int) TimeUnit.HOURS.toSeconds(1));
    messageSource.setFallbackToSystemLocale(false); // 关键配置,保持不变
    return messageSource;
}

如果你的rest-messages是放在i18n目录下,就把路径改成classpath:/i18n/rest-messages。

2. 强制Spring Data REST使用你的自定义MessageSource

接下来,需要通过RepositoryRestConfigurerAdapter告诉Spring Data REST不要用它自己的默认MessageSource,而是用你配置的这个。创建一个配置类:

@Configuration
public class SpringDataRestConfig extends RepositoryRestConfigurerAdapter {

    private final MessageSource customMessageSource;

    // 构造注入你自定义的MessageSource
    public SpringDataRestConfig(MessageSource customMessageSource) {
        this.customMessageSource = customMessageSource;
    }

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        // 把自定义MessageSource设置到Spring Data REST的配置中
        config.setMessageSource(customMessageSource);
    }
}

这样一来,Spring Data REST处理枚举翻译和自身消息时,就会使用你配置的MessageSource,遵循fallbackToSystemLocale=false的规则:当请求的Locale没有对应的rest-messages_{locale}.properties时,就会使用默认的rest-messages.properties,而不是 fallback到系统的it-IT版本。

额外检查点

  • 确认你的rest-messages.properties和rest-messages_it.properties的路径与basenames配置一致,避免Spring找不到文件而触发默认fallback行为。
  • 测试时可以发送一个带有Accept-Language: fr-FR的请求(假设没有rest-messages_fr.properties),验证返回的枚举翻译和REST消息是否来自默认的rest-messages.properties。

内容的提问来源于stack exchange,提问作者drenda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:19:51