Spring boot自定义国际化不生效
Spring boot自定义国际化不生效
今天在学自定义国际化的时候,代码始终不生效,最后发现自己名称写的不一致o(╥﹏╥)o
一个地方写的cn,一个地方写的en,服了自己了
除此之外,还了解到个可能不生效的原因
在WebMvcAutoConfiguration
里边自动配置的localeResolver
1、默认是加载系统的
2、自己定义了localeResolver
加载自己定义的
源码:
@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;
}
所以当我们写自己写的LocaleResolver不生效的原因只能是@bean
没有注册成功
- 了解到方法名必须是
localeResolver()
@Configuration public class MyMvcConfig implements WebMvcConfigurer{ @Bean public LocaleResolver localeResolver() { return new MyLocaleResolver(); } }
- 或者bean里面必须是
localeResolver
@Configuration public class MyMvcConfig implements WebMvcConfigurer{ @Bean("localeResolver") public LocaleResolver locale() { return new MyLocaleResolver(); } }
原因好像是源码里面固定的,具体是参考别的大佬的解释的
详情见:https://www.cnblogs.com/ql123456/p/12173219.html
在《Spring Boot 2 Recipes: A Problem-Solution Approach》书中提到这样一句话:
You can also define a locale resolver by registering a bean of type LocaleResolver in the web application context.
You must set the bean name of the locale resolver to localeResolver so it can be autodetected
上述英语意思为:在自定义localeResolver时方法名必须一致
注意:
写的时候一定要小心,别写错
本文地址:https://blog.csdn.net/weixin_44635198/article/details/107581138
上一篇: equals和==的区别_JAVA
下一篇: easyexcel 添加超链接
推荐阅读
-
Spring boot创建自定义starter的完整步骤
-
[Spring Boot]使用自定义注解统一请求返回值
-
spring boot使用自定义的线程池执行Async任务
-
spring事务的@Transactional使用事务不生效问题
-
Spring-Boot使用嵌入式容器,那怎么配置自定义Filter呢
-
spring-boot-2.0.3不一样系列之番外篇 - 自定义session管理,绝对有值得你看的地方
-
Spring boot 学习笔记 1 - 自定义错误
-
IDEA开发spring boot应用时 application.yml 或 application.properties 自定义属性提示
-
浅谈Spring Boot 属性配置和自定义属性配置
-
Spring boot中自定义Json参数解析器