国际化中英文跳转的时候出现“404错误”
这是我在springboot测试国际化出现的问题。
实现国际化的步骤分为三步: 创建一个MyInternationa类来继承LocaleResolver类,
public class MyInternationa implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { String lang = request.getParameter("lang"); // 国际化 Locale locale = Locale.getDefault(); if (!StringUtils.isEmpty(lang)){ String[] s = lang.split("_"); //切割为 语言 国家 locale = new Locale(s[0],s[1]); } return locale; } @Override public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { } }
HTML中转化路径`
<a class="btn btn-sm" th:href="@{/index.html(lang=zh_CN)}">中文</a> <a class="btn btn-sm" th:href="@{/index.html(lang=en_US)}">English</a>
自定义Bean,交给spring托管
@Bean public LocaleResolver localeResolver(){ return new MyInternationa(); }
但是在中英文转化的时候出现404错误。 从地址栏可以看出,参数是没有错误的,
从这里可以看出点击中英文转换的时候没有跳转index.html界面
仔细检查了一遍和各处debug,终于发现静态资源是默认跳转static的,并不会默认跳转templates,(这是一个坑) 但是*.HTML文件是放在templates文件下,要想跳转templates文件下,必须自己自定义跳转界面。
解决方法: 创建自定义跳转,
@Configuration public class MyConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/index.html").setViewName("index"); }
意思就是地址栏是index.html的就要跳转到index.html中、
问题就是这样解决了。
注意:要想springboot自行跳转的话,就需要把html文件放在static文件下,如果不是,就需要自定义跳转。
这样国际化跳转404就解决了。