国际化中英文跳转的时候出现“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就解决了。

经验分享 程序员 微信小程序 职场和发展