Spring覆蓋jar包中路徑映射的幾種解決方案
問題背景
項目中使用Spring,通過@GetMapping("/api/user") 定義了路徑映射 /api/user,現(xiàn)在有個需求需要修改這個路徑映射下的代碼邏輯,而由于該定義來自引入的jar,無法直接修改代碼。
解決方案
1 使用@RequestMapping優(yōu)先級
Spring會優(yōu)先選擇更具體的映射:
@RestController
public class MyController {
@GetMapping(path = "/api/user", params = "myParam")
public String myMethod() {
return "My implementation";
}
}
當url中帶有參數(shù)myParam時,spring會映射到這里處理,也可以設(shè)置為 params = "myParam=1",即當參數(shù)myParam=1時映射到此
2 使用Filter攔截并轉(zhuǎn)發(fā)請求到特定path
- 創(chuàng)建自定義Filter
@Component
public class PathOverrideFilter extends OncePerRequestFilter {
// 定義需要重定向的路徑映射
private static final Map<String, String> PATH_MAPPINGS = new HashMap<String, String>(){{
put("/api/user", "/api-new/user");
}};
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String requestURI = request.getRequestURI();
String redirectPath = PATH_MAPPINGS.get(requestURI);
// 檢查是否需要重定向
if (StringUtils.isNotBlank(redirectPath)) {
// 創(chuàng)建包裝請求,修改路徑信息
HttpServletRequest wrappedRequest = new HttpServletRequestWrapper(request) {
@Override
public String getRequestURI() {
return redirectPath;
}
@Override
public String getServletPath() {
return redirectPath;
}
};
// 繼續(xù)處理鏈,但使用修改后的請求
filterChain.doFilter(wrappedRequest, response);
return;
}
// 不需要重定向的請求正常處理
filterChain.doFilter(request, response);
}
}
- 創(chuàng)建目標Controller方法
@RestController
public class NewController {
@GetMapping("/api-new/user")
public String myMethod() {
// 你的新實現(xiàn)
return "My new implementation";
}
}
對于大多數(shù)需要"覆蓋"功能的場景,Filter轉(zhuǎn)發(fā)路徑方案通常是最佳選擇,它平衡了簡單性和功能性。
到此這篇關(guān)于Spring覆蓋jar包中路徑映射的幾種解決方案的文章就介紹到這了,更多相關(guān)Spring覆蓋jar包路徑映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-Plus接口BaseMapper與Services使用詳解
這篇文章主要為大家介紹了Mybatis-Plus接口BaseMapper與Services使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
Servlet關(guān)于RequestDispatcher的原理詳解
這篇文章主要介紹了Servlet關(guān)于RequestDispatcher的原理詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
maven?springboot如何將jar包打包到指定目錄
這篇文章主要介紹了maven?springboot如何將jar包打包到指定目錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java 利用DeferredResult實現(xiàn)http輪詢實時返回數(shù)據(jù)接口
這篇文章主要介紹了Java 利用 DeferredResult 實現(xiàn) http 輪詢實時返回數(shù)據(jù)接口,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03
Java gRPC攔截器簡單實現(xiàn)分布式日志鏈路追蹤器過程詳解
有請求的發(fā)送、處理,當然就會有攔截器的需求,例如在服務(wù)端通過攔截器統(tǒng)一進行請求認證等操作,這些就需要攔截器來完成,今天松哥先和小伙伴們來聊一聊gRPC中攔截器的基本用法,后面我再整一篇文章和小伙伴們做一個基于攔截器實現(xiàn)的JWT認證的gRPC2023-03-03
java 實現(xiàn)計數(shù)排序和桶排序?qū)嵗a
這篇文章主要介紹了java 實現(xiàn)計數(shù)排序和桶排序?qū)嵗a的相關(guān)資料,需要的朋友可以參考下2017-02-02

