SpringBoot的@GetMapping路徑匹配規(guī)則、國(guó)際化詳細(xì)教程
1. @GetMapping路徑匹配規(guī)則
- 默認(rèn)使用新版PathPatternParser進(jìn)行路徑匹配。性能比AntPathMatcher有6到8倍吞吐量提升,且降低30%~40%空間分配率兼容性方面。和antPathMatcher語(yǔ)法
- 兼容(但不能匹配**在中間的情況,但能匹配**在末尾的情況)。可以使用
spring.mvc.pathmatch.matching-strategy=ant_path_matcher進(jìn)行切換。默認(rèn)是path_pattern_parser。查看源碼如下:
package org.springframework.boot.autoconfigure.web.servlet;
......省略部分......
public class WebMvcAutoConfiguration {
......省略部分......
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {
......省略部分......
public void configurePathMatch(PathMatchConfigurer configurer) {
if (this.mvcProperties.getPathmatch().getMatchingStrategy() == MatchingStrategy.ANT_PATH_MATCHER) {
configurer.setPathMatcher(new AntPathMatcher());
this.dispatcherServletPath.ifAvailable((dispatcherPath) -> {
String servletUrlMapping = dispatcherPath.getServletUrlMapping();
if (servletUrlMapping.equals("/") && this.singleDispatcherServlet()) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setAlwaysUseFullPath(true);
configurer.setUrlPathHelper(urlPathHelper);
}
});
}
}
......省略部分......
}
......省略部分......
}Ant風(fēng)格的路徑模式語(yǔ)法具有以下規(guī)則:
- *:表示任意數(shù)量的字符
- ?:表示任意一個(gè)字符
- +: 表示1個(gè)或多個(gè)字符
- **:表示任意數(shù)量的目錄
- {}:表示一個(gè)命名的模式占位符
- []:表示字符集合,例如[a-z]表示小寫字母
例如:/{type}/{id}.html匹配任意文件名為{id}.html,在任意命名的{type}目錄下的文件
注意:Ant 風(fēng)格的路徑模式語(yǔ)法中的特殊字符需要轉(zhuǎn)義,如:
- 要匹配文件路徑中的星號(hào),則需要轉(zhuǎn)義為\\*
- 要匹配文件路徑中的問(wèn)號(hào),則需要轉(zhuǎn)義為\\?
使用示例如下所示。訪問(wèn)http://localhost:8080/abc/bd/abcdef/1/2
@GetMapping("/a*/b?/{p1:[a-f]+}/**")
public String hello2(HttpServletRequest request, @PathVariable("p1") String path) {
log.info("路徑變量p1: {}", path); // 路徑變量p1: abcdef
String uri = request.getRequestURI();
return uri; // /abc/bd/abcdef/1/2
}2. 國(guó)際化
國(guó)際化的自動(dòng)配置參照MessageSourceAutoConfiguration類
實(shí)現(xiàn)步驟:
- 1.Spring Boot在資源路徑根目錄下查找messages資源綁定文件。文件名為:messages.properties
- 2.多語(yǔ)言可以定義多個(gè)消息文件,命名為messages_區(qū)域代碼.properties。如:
messages.properties:默認(rèn)。文件內(nèi)容如下:
login=Login sign=Sign-Up
messages_zh_CN.properties:中文環(huán)境。文件內(nèi)容如下:
login=登錄 sign=注冊(cè)
messages_en_US.properties:英語(yǔ)環(huán)境。文件內(nèi)容如下:
login=Login sign=Sign-Up
3.在頁(yè)面中可以使用表達(dá)式#{}獲取國(guó)際化的配置項(xiàng)值。訪問(wèn)頁(yè)面會(huì)自動(dòng)根據(jù)瀏覽器的語(yǔ)言設(shè)置加載不同的messages消息配置文件
<button type="button" class="btn btn-outline-light me-2" th:text="#{login}">Login</button>
<button type="button" class="btn btn-warning" th:text="#{sign}">Sign-up</button>4.在程序中可以自動(dòng)注入MessageSource組件,獲取國(guó)際化的配置項(xiàng)值
package com.hh.springboot3test.controller;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Locale;
@RestController
public class ControllerTest {
@Autowired // 國(guó)際化取消息用的組件
MessageSource messageSource;
@GetMapping("/global")
public String global(HttpServletRequest request) {
Locale locale = request.getLocale();
// 利用代碼的方式獲取國(guó)際化配置文件中指定的配置項(xiàng)的值
String login = messageSource.getMessage("login", null, locale);
// 以rest方式返回?cái)?shù)據(jù)到頁(yè)面
return login;
}
}5.application.properties國(guó)際化參數(shù)配置
spring.messages.basename=messages spring.messages.encoding=UTF-8
到此這篇關(guān)于SpringBoot的@GetMapping路徑匹配規(guī)則、國(guó)際化的文章就介紹到這了,更多相關(guān)SpringBoot @GetMapping路徑匹配規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot集成I18n國(guó)際化文件在jar包外生效問(wèn)題
- SpringBoot實(shí)現(xiàn)前后端分離國(guó)際化的示例詳解
- 史上最佳springboot Locale 國(guó)際化方案
- Springboot+AOP實(shí)現(xiàn)返回?cái)?shù)據(jù)提示語(yǔ)國(guó)際化的示例代碼
- 基于springboot i18n國(guó)際化后臺(tái)多種語(yǔ)言設(shè)置的方式
- 如何在springboot中實(shí)現(xiàn)頁(yè)面的國(guó)際化
- SpringBoot參數(shù)校驗(yàn)與國(guó)際化使用教程
- SpringBoot實(shí)現(xiàn)國(guó)際化過(guò)程詳解
- Spring如何實(shí)現(xiàn)輸出帶動(dòng)態(tài)標(biāo)簽的日志
相關(guān)文章
Java多線程中的單例模式兩種實(shí)現(xiàn)方式
這篇文章主要介紹了Java多線程中的單例模式兩種實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下2017-04-04
Maven之導(dǎo)入thymeleaf依賴飄紅問(wèn)題及解決
這篇文章主要介紹了Maven之導(dǎo)入thymeleaf依賴飄紅問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
JAVA遞歸與非遞歸實(shí)現(xiàn)斐波那契數(shù)列
這篇文章主要為大家詳細(xì)介紹了JAVA遞歸與非遞歸實(shí)現(xiàn)斐波那契數(shù)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
MybatisPlus批量保存原理及失效原因排查全過(guò)程
這篇文章主要介紹了MybatisPlus批量保存原理及失效原因排查全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Java class文件格式之?dāng)?shù)據(jù)類型(二)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java class文件格式之?dāng)?shù)據(jù)類型(二)的相關(guān)資料,需要的朋友可以參考下2017-06-06
擴(kuò)展tk.mybatis的流式查詢功能實(shí)現(xiàn)
mybatis查詢默認(rèn)是一次獲取全部,如果數(shù)據(jù)過(guò)于龐大,就會(huì)導(dǎo)致OOM問(wèn)題,本文就介紹了tk.mybatis 流式查詢,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12
Spring Cloud Config解決的問(wèn)題和案例
Spring Cloud Config 是 Spring Cloud 套件中的一個(gè)工具,提供了在分布式系統(tǒng)中對(duì)外部化配置的服務(wù)器端和客戶端支持,本文介紹了Spring Cloud Config解決的問(wèn)題和案例,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-07-07
淺談ThreadLocal為什么會(huì)內(nèi)存泄漏
這篇文章主要介紹了淺談ThreadLocal為什么會(huì)內(nèi)存泄漏,每個(gè)Thread內(nèi)部維護(hù)著一個(gè)ThreadLocalMap,它是一個(gè)Map,這個(gè)映射表的Key是一個(gè)弱引用,其實(shí)就是ThreadLocal本身,Value是真正存的線程變量Object,需要的朋友可以參考下2023-12-12

