{"id":203,"date":"2021-12-31T15:05:07","date_gmt":"2021-12-31T07:05:07","guid":{"rendered":"https:\/\/program.snlcw.com\/?p=203"},"modified":"2021-12-31T15:06:39","modified_gmt":"2021-12-31T07:06:39","slug":"springmvc%e5%9b%bd%e9%99%85%e5%8c%96","status":"publish","type":"post","link":"https:\/\/program.snlcw.com\/203.html","title":{"rendered":"SpringMVC\u56fd\u9645\u5316"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/program.snlcw.com\/203.html\/#1_LocaleResolver\" >1 LocaleResolver<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/program.snlcw.com\/203.html\/#11_AcceptHeaderLocaleResolver\" >1.1 AcceptHeaderLocaleResolver<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/program.snlcw.com\/203.html\/#111_%E6%A1%88%E5%88%97\" >1.1.1 \u6848\u5217<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/program.snlcw.com\/203.html\/#12_SessionLocaleResolver\" >1.2 SessionLocaleResolver<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/program.snlcw.com\/203.html\/#13_CookieLocaleResolver\" >1.3 CookieLocaleResolver<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/program.snlcw.com\/203.html\/#14_FixedLocaleResolver\" >1.4 FixedLocaleResolver\u00a0<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/program.snlcw.com\/203.html\/#2_Controller%E5%A6%82%E4%BD%95%E5%BE%97%E5%88%B0%E8%AF%B7%E6%B1%82%E7%9A%84_Local\" >2\u00a0Controller\u5982\u4f55\u5f97\u5230\u8bf7\u6c42\u7684 Local<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/program.snlcw.com\/203.html\/#3_LocaleChangeInterceptor_%E7%9A%84%E4%BD%BF%E7%94%A8\" >3 LocaleChangeInterceptor \u7684\u4f7f\u7528<\/a><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"1_LocaleResolver\"><\/span><span style=\"font-size: 24px;\">1 LocaleResolver<\/span><span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>LocaleResolver \u662f\u6307\u7528\u4ec0\u4e48\u7b56\u7565\u6765\u68c0\u6d4b\u8bf7\u6c42\u662f\u54ea\u4e00\u79cdLocal, Spring \u63d0\u4f9b\u4ee5\u4e0b\u51e0\u79cd\u7b56\u7565\u3002<\/p>\n<h2><span class=\"ez-toc-section\" id=\"11_AcceptHeaderLocaleResolver\"><\/span><span style=\"font-size: 20px;\">1.1 AcceptHeaderLocaleResolver<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u6839\u636e\u6d4f\u89c8\u5668Http Header\u4e2d\u7684accept-language\u57df\u5224\u5b9a(accept-language\u57df\u4e2d\u4e00\u822c\u5305\u542b\u4e86\u5f53\u524d\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bed\u8a00\u8bbe\u5b9a\uff0c\u53ef\u901a\u8fc7HttpServletRequest.getLocale\u65b9\u6cd5\u83b7\u5f97\u6b64\u57df\u7684\u5185\u5bb9)\u3002 \u6539\u53d8Local \u662f\u4e0d\u652f\u6301\u7684\uff0c\u5373\u4e0d\u80fd\u8c03\u7528LocaleResolver\u63a5\u53e3\u7684 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale); <\/code>\u65b9\u6cd5\u8bbe\u7f6eLocal\u3002<\/p>\n<h3><span class=\"ez-toc-section\" id=\"111_%E6%A1%88%E5%88%97\"><\/span><span style=\"font-size: 16px;\">1.1.1 \u6848\u5217<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>LocaleConfiguration.class<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"mootools\">package com.falsec.pom.configuration;\r\n\r\nimport org.springframework.context.annotation.Bean;\r\nimport org.springframework.context.annotation.Configuration;\r\nimport org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;\r\n\r\nimport java.util.Locale;\r\n\r\n@Configuration\r\npublic class LocaleConfiguration {\r\n\r\n    \/\/\u6839\u636e\u6d4f\u89c8\u5668Http Header\u4e2d\u7684Accept-Language\u57df\u5224\u5b9a\uff0c\u5982\uff1aAccept-Language:en-US\u3001Accept-Language:zh-CH\r\n    @Bean\r\n    public AcceptHeaderLocaleResolver AcceptHeaderLocaleResolver() {\r\n        AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();\r\n        \/\/\u5982\u679c\u8bf7\u6c42\u5934\u6ca1\u6709\u643a\u5e26 Accept-Language:en-US \u7b49\u4fe1\u606f\u5c31\u4f7f\u7528\u9ed8\u8ba4\u7684\r\n        resolver.setDefaultLocale(Locale.CHINA);\r\n        return resolver;\r\n    }\r\n}\r\n<\/pre>\n<p>PosMessageSource.class<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"mootools\">@Component\r\npublic class PosMessageSource {\r\n    private static final String SEPARATOR = \".\";\r\n    private static final String BUNDLE_VENDOR = \"BUNDLE.VENDOR\";\r\n\r\n    @Autowired\r\n    private MessageSource messageSource;\r\n\r\n    public String getBundleVendorName(String vendorId) {\r\n        return getResource(BUNDLE_VENDOR, vendorId.toUpperCase());\r\n    }\r\n\r\n    private String getResource(String resourceBaseName, String name) {\r\n        name = resourceBaseName + SEPARATOR + name;\r\n        return messageSource.getMessage(name, null, LocaleContextHolder.getLocale());\r\n    }\r\n}<\/pre>\n<p>BundleController.class<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"mootools\">@RequestMapping({ \"\/bundle\" })\r\n@Controller\r\npublic class BundleController {\r\n    @Autowired\r\n    private PosMessageSource messageSource;\r\n    @Autowired\r\n    private VendorBundleService vendorBundleService;\r\n\r\n    @RequiresPermissions(value = {WildcardPermissionConstant.BUNDLE_VIEW})\r\n    @RequestMapping(value = {\"\/vendor\"}, method = {RequestMethod.GET}, produces = {\"application\/json\"})\r\n    @ResponseBody\r\n    public JsonWrapper&lt;VendorBundleData&gt; getVendorList() {\r\n        List&lt;VendorBundleData&gt; vendorBundleDataList = this.vendorBundleService.getAllVendorBundleData();\r\n\r\n        List&lt;VendorBundleDataDto&gt; vendorBundleDataDtoList = vendorBundleDataList.stream().map(c -&gt; new VendorBundleDataDto(c)).collect(Collectors.toList());\r\n        for (VendorBundleDataDto item : vendorBundleDataDtoList) {\r\n            Vendor vendor = item.getVendor();\r\n            String vendorId = vendor.getVendorId();\r\n\r\n            \/\/\u56fd\u9645\u5316\r\n            String vendorDisplayName = messageSource.getBundleVendorName(vendorId);\r\n            item.setVendorDisplayName(vendorDisplayName);\r\n\r\n            \/\/\u82e5\u6709\u4e2d\u6587\uff0c\u5219\u8f6c\u6210\u6c49\u8bed\u62fc\u97f3\u7b80\u5199\uff0c\u5e76\u5b58\u50a8\u5230\u6392\u5e8f\u5b57\u6bb5\u4e0a\uff0c\u6b64\u5b57\u6bb5\u4e0d\u663e\u793a\uff0c\u4ec5\u7528\u4e8e\u6392\u5e8f\r\n            List&lt;String&gt; pinyinOrEnglish = Pinyin4jUtil.converterToFirstSpell(vendorDisplayName);\r\n            item.setSortName(pinyinOrEnglish.get(0));\r\n        }\r\n\r\n        List&lt;VendorBundleDataDto&gt; sortedList = vendorBundleDataDtoList.stream().sorted(Comparator.comparing(c -&gt; c.getSortName().toLowerCase())).collect(Collectors.toList());\r\n        return new JsonWrapper(sortedList);\r\n    }\r\n}<\/pre>\n<p>message.properties \u90e8\u5206<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-theme=\"mootools\">BUNDLE.VENDOR.NEUSOFT = Neusoft\r\nBUNDLE.VENDOR.DPTECH = DPTech\r\nBUNDLE.VENDOR.VENUSTECH = VenusTech\r\nBUNDLE.VENDOR.RUIJIE = Ruijie\r\nBUNDLE.VENDOR.ARUBA = Aruba\r\nBUNDLE.VENDOR.CISCO = Cisco\r\nBUNDLE.VENDOR.RADWARE = Radware\r\nBUNDLE.VENDOR.LEGENDSEC = Legendsec\r\nBUNDLE.VENDOR.LEADSEC = LeadSec\r\nBUNDLE.VENDOR.HILLSTONE = Hillstone\r\nBUNDLE.VENDOR.ZTE = ZTE\r\nBUNDLE.VENDOR.SHENXINFU = ShenXinFu\r\nBUNDLE.VENDOR.HUAWEI = Huawei\r\nBUNDLE.VENDOR.SHENWEI = ShenWei\r\nBUNDLE.VENDOR.LINUX = linux\r\nBUNDLE.VENDOR.JUNIPER = Juniper<\/pre>\n<p>message_zh_CN.properties \u90e8\u5206<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-theme=\"mootools\">BUNDLE.VENDOR.NEUSOFT = \u4e1c\u8f6f\r\nBUNDLE.VENDOR.DPTECH = \u8fea\u666e\r\nBUNDLE.VENDOR.VENUSTECH = \u542f\u660e\u661f\u8fb0\r\nBUNDLE.VENDOR.RUIJIE = \u9510\u6377\r\nBUNDLE.VENDOR.ARUBA = \u5b89\u79fb\u901a\r\nBUNDLE.VENDOR.CISCO = \u601d\u79d1\r\nBUNDLE.VENDOR.RADWARE = Radware\r\nBUNDLE.VENDOR.LEGENDSEC = \u7f51\u795e\r\nBUNDLE.VENDOR.LEADSEC = \u7f51\u5fa1\r\nBUNDLE.VENDOR.ZTE = \u4e2d\u5174\r\nBUNDLE.VENDOR.SHENXINFU = \u6df1\u4fe1\u670d\r\nBUNDLE.VENDOR.HUAWEI = \u534e\u4e3a\r\nBUNDLE.VENDOR.SHENWEI = \u795e\u5a01\r\nBUNDLE.VENDOR.LINUX = linux\r\nBUNDLE.VENDOR.JUNIPER = Juniper<\/pre>\n<p>\u63a5\u4e0b\u6765\u5230\u4e86\u6d4b\u8bd5\u73af\u5883\uff0c\u9996\u5148\u5728chrome\u6d4f\u89c8\u5668\u4e0a\u5b89\u88c5\u00a0<span style=\"color: #ff0000;\">ModHeader<\/span> \u63d2\u4ef6\uff0c\u7136\u540e\u6dfb\u52a0\u5982\u4e0b\u8bf7\u6c42\u5934\uff1a<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-204 size-full\" src=\"https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111427.png\" alt=\"\" width=\"601\" height=\"180\" srcset=\"https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111427.png 601w, https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111427-300x90.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/p>\n<p>\u6539\u7528\u82f1\u6587\uff1a<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-205 size-full\" src=\"https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111721.png\" alt=\"\" width=\"605\" height=\"211\" srcset=\"https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111721.png 605w, https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111721-300x105.png 300w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><\/p>\n<p>\u663e\u793a\u7ed3\u679c\uff1a<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-207 size-full\" src=\"https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111805.png\" alt=\"\" width=\"369\" height=\"371\" srcset=\"https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111805.png 369w, https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111805-298x300.png 298w, https:\/\/program.snlcw.com\/wp-content\/uploads\/2021\/12\/QQ\u56fe\u724720190124111805-150x150.png 150w\" sizes=\"auto, (max-width: 369px) 100vw, 369px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"12_SessionLocaleResolver\"><\/span><span style=\"font-size: 20px;\">1.2 SessionLocaleResolver<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u6839\u636e\u7528\u6237\u672c\u6b21\u4f1a\u8bdd\u8fc7\u7a0b\u4e2d\u7684\u8bed\u8a00\u8bbe\u5b9a\u51b3\u5b9a\u8bed\u8a00\u79cd\u7c7b\uff08\u5982\uff1a\u7528\u6237\u767b\u5f55\u65f6\u9009\u62e9\u8bed\u8a00\u79cd\u7c7b\uff0c\u5219\u6b64\u6b21\u767b\u5f55\u5468\u671f\u5185\u7edf\u4e00\u4f7f\u7528\u6b64\u8bed\u8a00\u8bbe\u5b9a\uff09\u3002<\/p>\n<h2><span class=\"ez-toc-section\" id=\"13_CookieLocaleResolver\"><\/span><span style=\"font-size: 20px;\">1.3 CookieLocaleResolver<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u6839\u636eCookie\u5224\u5b9a\u7528\u6237\u7684\u8bed\u8a00\u8bbe\u5b9a\uff08Cookie\u4e2d\u4fdd\u5b58\u7740\u7528\u6237\u524d\u4e00\u6b21\u7684\u8bed\u8a00\u8bbe\u5b9a\u53c2\u6570\uff09\u3002<\/p>\n<h2><span class=\"ez-toc-section\" id=\"14_FixedLocaleResolver\"><\/span><span style=\"font-size: 20px;\">1.4 FixedLocaleResolver\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u4e00\u76f4\u4f7f\u7528\u56fa\u5b9a\u7684Local, \u6539\u53d8Local \u662f\u4e0d\u652f\u6301\u7684\u3002<\/p>\n<h1><span class=\"ez-toc-section\" id=\"2_Controller%E5%A6%82%E4%BD%95%E5%BE%97%E5%88%B0%E8%AF%B7%E6%B1%82%E7%9A%84_Local\"><\/span><span style=\"font-size: 24px;\">2\u00a0Controller\u5982\u4f55\u5f97\u5230\u8bf7\u6c42\u7684 Local<\/span><span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>DispatchServlet \u5c06\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\uff0c \u4f1a\u8c03\u7528<code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">initLocaleResolver(context)<\/code>\u65b9\u6cd5\u53bb\u914d\u7f6e\u6587\u4ef6\u4e2d\u627e\u540d\u5b57\u4e3a localeResolver \u7684 bean. \u5982\u679c\u6709\u5c31\u7528\u914d\u7f6e\u6587\u4ef6\u914d\u7f6e\u7684localResolver. \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5c06\u7528\u9ed8\u8ba4\u7684 AcceptHeaderLocaleResolver\u3002<\/p>\n<p>DispatchServlet \u4f1a\u5728 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">processRequest(HttpServletRequest request, HttpServletResponse response)<\/code>\u65b9\u6cd5\u4e2d\u8bbe\u7f6e<span style=\"color: #ff0000;\">LocaleContext<\/span>, \u628aLocalContext \u548c\u5f53\u524d\u7ebf\u7a0b\u5173\u8054\u8d77\u6765.\u00a0\u4ee3\u7801\u5982\u4e0b\uff1a<code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">LocaleContextHolder.setLocaleContext (buildLocaleContext(request), this. threadContextInheritable );<\/code>DispatchServlet \u4e2dbuildLocalContext\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"mootools\">protected LocaleContext buildLocaleContext( final HttpServletRequest request) {\r\n        return new LocaleContext() {\r\n            public Locale getLocale() {\r\n                return localeResolver .resolveLocale(request);\r\n            }\r\n\r\n            @Override\r\n            public String toString() {\r\n                return getLocale().toString();\r\n            }\r\n        };\r\n}<\/pre>\n<p style=\"font-weight: 400;\">\u8fd9\u91cc\u7684Local\u901a\u8fc7localResolver \u89e3\u6790\u5f97\u5230,\u00a0 localResolver \u5373\u662f\u4eceSpring \u914d\u7f6e\u6587\u4ef6\u914d\u7f6e\u7684localResolver, \u9ed8\u8ba4\u662f&#8221;AcceptHeaderLocaleResolver&#8221;.\u5982\u679c\u4f60\u60f3\u8981\u5728 controller \u4e2d\u5f97\u5230\u5f53\u524d\u8bf7\u6c42\u7684Local,\u00a0 \u4ee3\u7801\u53ef\u4ee5\u5982\u4e0b\u5199\uff1a<code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">Locale locale = LocaleContextHolder.getLocale();<\/code>\u6216\u8005\u4f60\u53ef\u4ee5\u7528<code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">RequestContextUtils.getLocale(HttpServletRequest request)<\/code>\u8fd9\u79cd\u65b9\u5f0f\u662f\u5148\u5f97\u5230 request \u4e2d\u4fdd\u5b58\u7684localResolver\uff0c \u5e76\u7528localResolver \u89e3\u6790\u5f97\u5230Local\u3002localResolver \u4f1a\u5728DispatcherServlet\u7684doService \u65b9\u6cd5\u4e2d\uff0c\u5c06localResolver\u4fdd\u5b58\u5230request \u5c5e\u6027\u4e2d \u4ee3\u7801\u5982\u4e0b\uff1a<code class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE, this.localeResolver);<\/code><\/p>\n<h1><span class=\"ez-toc-section\" id=\"3_LocaleChangeInterceptor_%E7%9A%84%E4%BD%BF%E7%94%A8\"><\/span><span style=\"font-size: 24px;\">3 LocaleChangeInterceptor \u7684\u4f7f\u7528<\/span><span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p style=\"font-weight: 400;\">\u5982\u679c\u60f3\u8981\u7528\u6237\u80fd\u6539\u53d8Local, \u6211\u4eec\u9700\u8981\u914d\u7f6e LocaleChangeInterceptor, \u8fd9\u4e2a\u62e6\u622a\u5668\u5c06\u68c0\u67e5\u4f20\u5165\u7684\u8bf7\u6c42\uff0c\u5982\u679c\u8bf7\u6c42\u4e2d\u6709\u201clocal&#8221; \u7684\u53c2\u6570(\u53c2\u6570\u53ef\u4ee5\u914d\u7f6e\uff09\uff0c\u5982http:\/\/localhost:8080\/test?local=zh_CN. \u8be5Interceptor\u5c06\u4f7f\u7528localResolver\u6539\u53d8\u5f53\u524d\u7528\u6237\u7684Local, \u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"mootools\">String newLocale = request.getParameter( this . paramName );\r\nif (newLocale != null ) {\r\n  LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver (request);\r\n  if (localeResolver == null ) {\r\n      throw new IllegalStateException( \"No LocaleResolver found: not in a ...\" );\r\n  }\r\n\r\n  \/\/\u6539\u53d8\u5f53\u524d\u7684Local\r\n  localeResolver.setLocale (request, response, StringUtils.parseLocaleString (newLocale));\r\n}<\/pre>\n<p><span style=\"color: #ff0000;\">\u63d0\u793a<\/span>\uff1a\u8981\u4f7f\u5f97LocaleChangeInterceptor \u6709\u6548\u679c\uff0c\u9700\u8981\u5728Spring Boot\u914d\u7f6e\u4e2d\u4f7f\u7528 @Bean\u3002<!--\/codes_iframe--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1 LocaleResolver LocaleResolver \u662f\u6307\u7528\u4ec0\u4e48\u7b56\u7565\u6765\u68c0\u6d4b\u8bf7\u6c42\u662f\u54ea\u4e00\u79cdLocal, \u2026 <span class=\"read-more\"><a href=\"https:\/\/program.snlcw.com\/203.html\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[],"class_list":["post-203","post","type-post","status-publish","format-standard","hentry","category-springmvc"],"_links":{"self":[{"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/posts\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/comments?post=203"}],"version-history":[{"count":0,"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/posts\/203\/revisions"}],"wp:attachment":[{"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/media?parent=203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/categories?post=203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/program.snlcw.com\/wp-json\/wp\/v2\/tags?post=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}