Springboot 自定义localeResolver不生效的问题

 

我用的是springboot 2.2.0版本,在使用自定义localResolver实现国际化时,按照网上的文章(比如下边的链接)上的步骤,想让页面按照请求参数的值来显示中文还是英文,发现并不生效。还是AcceptHeaderLocalResolver在起作用。

https://www.cnblogs.com/fxsenblog/p/11696604.html

反复排查,没有找出原因。后来看到《Spring Boot 2 Recipes: A Problem-Solution Approach》这本书中有提到这样一句话:

后来,通过修改配置类, Bean创建函数的@Bean注解的值,将beanName设置成localResolver,果然问题解决了。

@Bean("localeResolver")
public LocaleResolver getMyLocalResolver(){

    return new MyLocalResolver();
}

当然也可以像下边这样直接修改方法名,也可以解决问题。因为spring在通过java config对象中的方法创建Bean时,默认会用方法的名字作为容器中该bean的名字(就是spring配置文件中,bean的id的值)。

@Bean
public MyLocalResolver localeResolver(){

    return new MyLocalResolver();
}

 顺便说一下,WebMvcAutoConfiguration里边自动配置的localeResolver,好像并没有直接装载到容器中。即使我们没有在我们的配置类中定义自己的localResolver,在容器中也不能直接找到加载的localResolver对象。

public class WebMvcAutoConfiguration {
...
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
public LocaleResolver localeResolver() {
   if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
      return new FixedLocaleResolver(this.mvcProperties.getLocale());
   }
   AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
   localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
   return localeResolver;
}

我们可以通过如下代码确认这一点。

@SpringBootApplication
public class SpringBoot04WebRestfulCrudApplication {

    public static void main(String[] args) {
        ApplicationContext ac = SpringApplication.run(SpringBoot04WebRestfulCrudApplication.class, args);
        //Arrays.stream(ac.getBeanNamesForType(LocaleResolver.class)).forEach(System.out::println);
        String[] beanNamesForType = ac.getBeanNamesForType(LocaleResolver.class);
        if(beanNamesForType.length > 0){
            for (String s: beanNamesForType) {
                System.out.println("================>" + s);
            }
        }
    }
}

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值