日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java工具類之@RequestMapping注解

瀏覽:189日期:2022-08-12 08:41:44
目錄一、前言二、代碼實現(xiàn)三、效果一、前言

問題闡述:在某一場景下,我們的代碼在 Service 實現(xiàn)相同,但卻在 Controller 層訪問時卻希望不同的前綴可以訪問。如下 :/say/hello。我們這里希望在不借助任何外部服務(wù)的情況下 通過 /a/say/hello 和 /b/say/hello 都可以訪問到該接口,同時不想在 Controller 中寫兩個方法。

@RestController@RequestMapping('say')public class SayController { @Autowired private SayService sayService; @RequestMapping('hello') public String hello() {return sayService.hello(); }}二、代碼實現(xiàn)

我們這里簡單說明一下思路:

1.在 Spring 服務(wù)啟動后, HandlerMapping 的實現(xiàn)類 RequestMappingHandlerMapping 會獲取到被 @RequestMapping等請求注解修飾的方法,并封裝成一個個 HandlerMethod 保存到 RequestMappingHandlerMapping#MappingRegistry 中(HandlerMapping 具有多個實現(xiàn)類,每個實現(xiàn)類具有不同規(guī)則)。

2.當(dāng) DispatcherServlet 接收到請求后會根據(jù) url 獲取 合適的 HandlerMapping 組成 HandlerExecutionChain(處理器執(zhí)行鏈),隨后通過 HandlerAdapter 來進行請求處理。而這里通過 HandlerMapping 會根據(jù)請求 URL 獲取到匹配的 HandlerMethod 進行方法調(diào)用。

因此我們這里有了兩種思路 :

1.在 Spring 加載 HandlerMethod 時設(shè)置當(dāng)前 HandlerMethod 的匹配規(guī)則為 /a/say/hello/、/b/say/hello/,當(dāng) /a/say/hello/、/b/say/hello/ 請求訪問時可以與之匹配。

2.在請求處理的時候,通過攔截器將 /a/say/hello/、/b/say/hello/ 的訪問路徑匹配到 /say/hello 方法上。

本文選擇第一種思路(不過話說怎么想都是第一種好吧)做一個簡單demo示例,其實現(xiàn)如下:

// 自定義分發(fā)注解@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestRouter { String[] value() default '';}

package com.kingfish.springjdbcdemo.config;import lombok.SneakyThrows;import org.springframework.stereotype.Component;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;import org.springframework.web.servlet.mvc.method.RequestMappingInfo;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;import javax.servlet.http.HttpServletRequest;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Arrays;import java.util.Set;import java.util.stream.Collectors;/** * @Author : kingfish * @Email : kingfishx@163.com * @Data : 2021/4/21 16:47 * @Desc : 路由 HandlerMapping 的實現(xiàn) */@Component('handlerMapping')public class RouterRequestMappingHandlerMapping extends RequestMappingHandlerMapping {// 在將 方法封裝成 HandlerMethod 時會調(diào)用此方法 @SneakyThrows @Override protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) { // 獲取 RequestRouter 注解 RequestRouter requestRouter = method.getAnnotation(RequestRouter.class);if (requestRouter == null) { requestRouter = handlerType.getAnnotation(RequestRouter.class); if (requestRouter == null) {for (Class<?> handlerTypeInterface : handlerType.getInterfaces()) { if ((requestRouter = handlerTypeInterface.getAnnotation(RequestRouter.class)) != null) {break; }} }}// 調(diào)用父類,生成 RequestMappingInfo RequestMappingInfo mappingForMethod = super.getMappingForMethod(method, handlerType);if (requestRouter != null) {// 如果 requestRouter 不為空,則進行路徑處理 String[] requestRouterValue = requestRouter.value(); PatternsRequestCondition condition = mappingForMethod.getPatternsCondition(); // 獲取當(dāng)前方法匹配的路徑,隨即進行添加處理。 Set<String> patterns = condition.getPatterns(); Set<String> routerPatterns = patterns.stream() // 拼接 請求路徑。這里可以自定義處理策略 .flatMap(pattern -> Arrays.stream(requestRouterValue).map(val -> '/' + val + pattern)) .collect(Collectors.toSet()); // 將拼接后的路徑添加到 RequestMappingInfo 中 patterns.addAll(routerPatterns);}return mappingForMethod; }}

@Configurationpublic class SpringConfig { @Bean public DispatcherServlet dispatcherServlet(){DispatcherServlet dispatcherServlet = new DispatcherServlet();// 禁止加載所有的handlerMapper,而只加載beanName 為 handlerMapper 的beandispatcherServlet.setDetectAllHandlerMappings(false);return dispatcherServlet; }}

這里需要注意 :

1.HandlerMapping 在 Spring中有多個實現(xiàn),而 dispatcherServlet.setDetectAllHandlerMappings(false); 參數(shù)設(shè)置Spring 放棄加載多個 HandlerMapping,而只加載 beanName為 handlerMapping 的

2.HandlerMapping。RequestMappingInfo 包含 當(dāng)前方法的諸多信息,其中就包含 什么樣請求路徑可以匹配到該方法,所以我們在這里獲取到 RequestRouter 的信息,并添加到匹配路徑上。

三、效果

在 方法上加上 @RequestRouter(value = {'a', 'b'}) 注解

@RestController@RequestMapping('say')public class SayController { @Autowired private SayService sayService; @RequestRouter(value = {'a', 'b'}) @RequestMapping('hello') public String hello() {return sayService.hello(); }}

/a/say/hello/、/b/say/hello/ 以及 /say/hello/ 都可以訪問

Java工具類之@RequestMapping注解Java工具類之@RequestMapping注解

到此這篇關(guān)于Java工具類之@RequestMapping注解的文章就介紹到這了,更多相關(guān)Java RequestMapping內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产激情综合| av亚洲免费| 日本国产欧美| 日韩欧美美女在线观看| 免费人成网站在线观看欧美高清| 欧美在线亚洲综合一区| 欧美va天堂| 黄色亚洲精品| 一区二区国产在线| 日韩在线一二三区| 亚洲精品自拍| 国产毛片一区二区三区| 麻豆传媒一区二区三区| 黄色在线网站噜噜噜| 日韩三区在线| 99国产精品久久久久久久| 久久av一区| 久久精品99国产精品日本| 国产高清视频一区二区| 精品网站999| 欧美aa一级| 亚洲一级在线| 欧美日本三区| 久久久久九九精品影院| 国产成人精品一区二区三区视频| 国产亚洲精品美女久久| 日韩成人免费| aa亚洲婷婷| 久久精品 人人爱| 捆绑调教日本一区二区三区| av成人国产| 国产精品一区二区美女视频免费看| 国产一区二区三区不卡视频网站 | 久久蜜桃av| 男女精品网站| 国产精品久久久久久久久久妞妞 | 91亚洲无吗| 黄色在线观看www| 国产亚洲亚洲| 国产精品大片免费观看| 日韩免费视频| 中文无码日韩欧| 精品淫伦v久久水蜜桃| 久久精品青草| 日韩国产在线一| 亚洲女同av| 亚洲专区视频| 97精品国产福利一区二区三区| 亚洲激情精品| 欧美经典一区| 制服诱惑一区二区| 免费在线观看一区| 夜夜嗨一区二区三区| 久久不卡国产精品一区二区| 亚洲午夜久久久久久尤物| 日本成人一区二区| 亚洲1234区| 欧美亚洲自偷自偷| 亚洲电影在线| 91综合久久爱com| 精品一区亚洲| 久久中文字幕一区二区三区| 午夜在线视频观看日韩17c| 欧美在线资源| 国产不卡av一区二区| 免播放器亚洲一区| 亲子伦视频一区二区三区| 91精品日本| 久久av在线| 秋霞影视一区二区三区| 91麻豆精品激情在线观看最新 | 麻豆精品国产91久久久久久| 在线综合亚洲| 午夜欧美巨大性欧美巨大| 亚洲精品黄色| 国产精品99一区二区| 久久伊人久久| 亚洲精品黄色| 国产亚洲福利| 999国产精品永久免费视频app| 国产精品高清一区二区| 美国欧美日韩国产在线播放| 天堂中文av在线资源库| 国产麻豆精品久久| 综合亚洲自拍| 女同性一区二区三区人了人一| 红杏一区二区三区| 欧美日韩一区二区三区在线电影| 亚洲精品国产偷自在线观看| 久久久久久久欧美精品| 亚洲综合激情在线| 宅男噜噜噜66国产日韩在线观看| 精品国产第一福利网站| 国产欧美一区| 日韩三级精品| 天堂av在线一区| 午夜av一区| 婷婷成人综合| 欧美日韩在线播放视频| 夜鲁夜鲁夜鲁视频在线播放| 成人在线视频免费看| 精品黄色一级片| 国产九一精品| 国产三级一区| 久久精品xxxxx| 久久国产乱子精品免费女| 免费的成人av| 亚洲视频国产| 男女男精品视频网| 鲁大师影院一区二区三区| 在线精品小视频| 伊人久久成人| 国产亚洲在线观看| 视频在线在亚洲| 三级亚洲高清视频| 亚洲综合欧美| 噜噜噜久久亚洲精品国产品小说| 亚洲欧洲一区| 亚洲一区国产| 亚洲综合二区| 蜜桃一区二区三区在线观看| 免费人成在线不卡| 日韩一区中文| 国产丝袜一区| 精品一区二区三区视频在线播放| 欧美国产视频| 国产精品99一区二区三| 国产精品99一区二区三| 中文字幕在线看片| 视频福利一区| 中日韩男男gay无套| 亚洲日本久久| 91亚洲精品在看在线观看高清 | 日韩黄色在线观看| 国产精品流白浆在线观看| 久久男人av| 午夜影院一区| 好看不卡的中文字幕| 久久国产高清| 日韩在线麻豆| 国产精品色在线网站| 精品国产亚洲一区二区在线观看| 日韩综合在线| 激情丁香综合| 奶水喷射视频一区| 日韩动漫一区| 久久国产精品美女| 久久夜夜操妹子| 国产精品毛片| 欧美亚洲国产日韩| 麻豆国产在线| 亚洲综合电影一区二区三区| 青青国产91久久久久久| 国产91在线播放精品| 久久中文字幕av一区二区不卡| 亚洲综合三区| 国产精品115| 欧美日韩在线网站| 日本国产一区| 亚洲精品**中文毛片| 亚洲深夜av| 国产免费久久| 91av亚洲| 中文字幕成人| 国产不卡精品在线| 在线亚洲一区| 免费亚洲一区| 午夜国产精品视频免费体验区| 日本成人中文字幕| 欧洲一区二区三区精品| 中文字幕视频精品一区二区三区| 欧美成人aaa| 不卡中文字幕| 国产日韩欧美一区二区三区 | 国产日韩一区二区三免费高清 | www.九色在线| 欧美资源在线| 美女精品视频在线| 国产国产精品| 国产精品大片免费观看| 欧美1区2区3区| 国产精品va| 精品一区在线| 国产探花一区| 午夜久久美女| 久久伊人久久| 噜噜噜躁狠狠躁狠狠精品视频| 久久精品一本| 亚洲综合中文| 亚洲欧洲美洲av| 日韩av一区二| 亚洲精品网址| 国产成人精品一区二区三区在线| 鲁大师成人一区二区三区| 日本欧美国产| 日韩成人午夜精品| 国产一区欧美| 麻豆精品视频在线| 在线国产精品一区| 久久久精品午夜少妇|