• 关于Springboot LocaleResolver 国际化的实现方式


    第一种方式

    package com.wuhao.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("index");
            registry.addViewController("/index.html").setViewName("index");
            registry.addViewController("/main.html").setViewName("dashboard");
        }
    
        @Bean
        public LocaleResolver localeResolver(){
            return new MyLocalResolver();
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoginHandlerInterceptor())
                    .addPathPatterns("/**")
                    .excludePathPatterns("/index.html","/","/user/login");
        }
    
    }
    View Code
    package com.wuhao.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.thymeleaf.util.StringUtils;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Locale;
    
    
    public class MyLocalResolver implements LocaleResolver, WebMvcConfigurer {
        //解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            String language = request.getParameter("l");
            Locale defaultLanguage = Locale.getDefault();
            if(!StringUtils.isEmpty(language)){
                String[] split = language.split("_");
                defaultLanguage = new Locale(split[0], split[1]);
            }
            return defaultLanguage;
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    
        }
    }
    View Code

    第二种方式

    package com.wuhao.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.thymeleaf.util.StringUtils;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Locale;
    
    @Component("localeResolver")
    public class MyLocalResolver implements LocaleResolver, WebMvcConfigurer {
        //解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            String language = request.getParameter("l");
            Locale defaultLanguage = Locale.getDefault();
            if(!StringUtils.isEmpty(language)){
                String[] split = language.split("_");
                defaultLanguage = new Locale(split[0], split[1]);
            }
            return defaultLanguage;
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    
        }
    }
    View Code

    区别就在于 一种是用@bean注解去实现, @bean注解声明的方法 会返回当前声明方法的类型 

    也就是说@bean声明以后 ioc注册时,会注册 LocaleResolver 类型。 

    第二种方式 如果我只是用@Component 而不是@Component("localeResolver")。一样会失败 

    因为DispatcherServlet在执行注册的时候, 只会去找

    protected void initStrategies(ApplicationContext context) {
    this.initMultipartResolver(context);
    this.initLocaleResolver(context);
    this.initThemeResolver(context);
    this.initHandlerMappings(context);
    this.initHandlerAdapters(context);
    this.initHandlerExceptionResolvers(context);
    this.initRequestToViewNameTranslator(context);
    this.initViewResolvers(context);
    this.initFlashMapManager(context);
    }
    initLocaleResolver 这个方法里的
    private void initLocaleResolver(ApplicationContext context) {
    try {
    this.localeResolver = (LocaleResolver)context.getBean("localeResolver", LocaleResolver.class);
    if (this.logger.isTraceEnabled()) {
    this.logger.trace("Detected " + this.localeResolver);
    } else if (this.logger.isDebugEnabled()) {
    this.logger.debug("Detected " + this.localeResolver.getClass().getSimpleName());
    }
    } catch (NoSuchBeanDefinitionException var3) {
    this.localeResolver = (LocaleResolver)this.getDefaultStrategy(context, LocaleResolver.class);
    if (this.logger.isTraceEnabled()) {
    this.logger.trace("No LocaleResolver 'localeResolver': using default [" + this.localeResolver.getClass().getSimpleName() + "]");
    }
    }

    }
    这个变量。
    所以自己

  • 相关阅读:
    数据分析 --- 01. Numpy
    爬虫 --- 08. 全站爬取(CrawlSpider), 分布式, 增量式爬虫
    爬虫 --- 07. 全站爬取(手动), post请求,cookie, 传参,中间件,selenium
    数据结构 --- 02. 内存, 顺序表, 单链表
    数据结构 --- 01. 时间复杂度,timeit模块,栈,队列,双端队列
    爬虫 --- 06. scrapy框架初始,移动端数据爬取
    爬虫 --- 05. 异步协程, 浏览器自动化,
    爬虫 --- 04. 代理服务器, 验证码识别, 处理cookie,线程池
    爬虫 --- 02. 爬取图片,数据解析
    一个关于const 变量作为map键值的Bug
  • 原文地址:https://www.cnblogs.com/wuhaojs/p/15672272.html
Copyright © 2020-2023  润新知