SpringBoot2.x實(shí)現(xiàn)給Controller的RequestMapping添加統(tǒng)一前綴
給Controller的RequestMapping添加統(tǒng)一前綴
如何給Controller的RequestMapping添加統(tǒng)一前綴,比如"/api",為什么要添加統(tǒng)一訪(fǎng)問(wèn)前綴,其實(shí)是為了后面的接口的管理。
切記:約定與規(guī)范好過(guò)一切技術(shù)處理 !
比如:
- 項(xiàng)目A必須所有訪(fǎng)問(wèn)接口URL必須增加 /api/projectA/
- 項(xiàng)目B必須所有訪(fǎng)問(wèn)接口URL必須增加 /api/projectB/
- 看到url里面含有/api 表示訪(fǎng)問(wèn)后端接口服務(wù),/projectA/ 一看就知道是項(xiàng)目A提供的服務(wù)接口。
總結(jié)一下 有幾個(gè)方法
1、在配置application.yml文件中添加:
? servlet: ? ? context-path: /api #(不同SpringBoot版本會(huì)有區(qū)別,這里是采用2.x)
但是這個(gè)其實(shí)是整個(gè)項(xiàng)目訪(fǎng)問(wèn)前綴,如果你有靜態(tài)資源也需要增加 /api 這個(gè)前綴訪(fǎng)問(wèn)。
2、通過(guò)nginx 和 你的網(wǎng)關(guān)層 添加統(tǒng)一的訪(fǎng)問(wèn)路徑前綴,這個(gè)不多說(shuō)了。
3、springMVC 可以實(shí)現(xiàn) WebMvcConfigurer 接口中的 configurePathMatch 方法來(lái)實(shí)現(xiàn)添加統(tǒng)一路徑前綴。
package com.middol.webbase.framework.config; import com.middol.webbase.framework.annotation.ApiRestController; import com.middol.webbase.framework.annotation.ReportRestController; import com.middol.webbase.framework.properties.ApiPathProperties; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource; /** * 配置統(tǒng)一的后臺(tái)接口訪(fǎng)問(wèn)路徑的前綴 * @author C西 */ @Configuration public class MyWebMvcConfig implements WebMvcConfigurer { @Resource private ApiPathProperties apiPathProperties; @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer .addPathPrefix(apiPathProperties.getGlobalPrefix(),c -> c.isAnnotationPresent(ApiRestController.class)) .addPathPrefix(apiPathProperties.getReportPrefix(),c -> c.isAnnotationPresent(ReportRestController.class)); } }
意思是 對(duì)有 @ApiRestController 注解的 controller 添加 /api前綴,對(duì)有@ReportRestController 注解的controller添加 /api/report 前綴。
@ApiRestController 和 @ReportRestController 是自定義注解繼承 @RestController注解。
package com.middol.webbase.framework.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.lang.annotation.*; /** * controller層統(tǒng)一使用該注解 * @author C西 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @RestController @RequestMapping public @interface ApiRestController { /** * Alias for {@link RequestMapping#name}. */ @AliasFor(annotation = RequestMapping.class) String name() default ""; /** * Alias for {@link RequestMapping#value}. */ @AliasFor(annotation = RequestMapping.class) String[] value() default {}; /** * Alias for {@link RequestMapping#path}. */ @AliasFor(annotation = RequestMapping.class) String[] path() default {}; }
然后 你的業(yè)務(wù)controller 層代碼添加 @ApiRestController 即可,如下:
@Api(value = "DemoUser增刪改查接口", tags = "【測(cè)試接口】") @ApiRestController("demoUser") public class DemoUserController extends BaseController{ }
其中 ApiPathProperties 是統(tǒng)一前綴名稱(chēng)管理,可以在yml中修改,我這里設(shè)置了兩個(gè) 一般的CRUD接口 /api , 報(bào)表服務(wù)接口 統(tǒng)一為 /api/report,各自看各自服務(wù)定到底設(shè)置幾個(gè)。
package com.middol.webbase.framework.properties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * 接口路徑前綴配置 * @author C西 */ @Component @ConfigurationProperties(prefix = "api.path") @Data public class ApiPathProperties { String globalPrefix = "api"; String reportPrefix = "api/report"; }
application.yml文件中添加如下
## 專(zhuān)門(mén)針對(duì) Controller層接口路徑前綴全局配置 api: ? path: ? ? global-prefix: api ? ? report-prefix: api/report
springboot項(xiàng)目添加全局前綴
spring的配置
spring.application.name: article (spring boot下無(wú)效)
spring boot的配置
(springboot你自己設(shè)置的前綴名稱(chēng))
properties文件
server.servlet.context-path: /springboot
yml文件
server: ? servlet: ? ? context-path: /springboot
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決 java.lang.NoSuchMethodError的錯(cuò)誤
這篇文章主要介紹了解決 java.lang.NoSuchMethodError的錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2017-06-06IntelliJ IDEA下SpringBoot如何指定某一個(gè)配置文件啟動(dòng)項(xiàng)目
這篇文章主要介紹了IntelliJ IDEA下SpringBoot如何指定某一個(gè)配置文件啟動(dòng)項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09SpringCloud Gateway動(dòng)態(tài)轉(zhuǎn)發(fā)后端服務(wù)實(shí)現(xiàn)過(guò)程講解
這篇文章主要介紹了SpringCloud Gateway動(dòng)態(tài)轉(zhuǎn)發(fā)后端服務(wù)實(shí)現(xiàn)過(guò)程,簡(jiǎn)單的路由轉(zhuǎn)發(fā)可以通過(guò)SpringCloudGateway的配置文件實(shí)現(xiàn),在一些業(yè)務(wù)場(chǎng)景種,會(huì)需要?jiǎng)討B(tài)替換路由配置中的后端服務(wù)地址,單純靠配置文件無(wú)法滿(mǎn)足這種需求2023-03-03詳解Spring-bean的循環(huán)依賴(lài)以及解決方式
這篇文章主要介紹了詳解Spring-bean的循環(huán)依賴(lài)以及解決方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Eclipse可視化插件WindowBuilder的安裝方法
這篇文章主要介紹了Eclipse可視化插件WindowBuilder的安裝方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06關(guān)于JavaEE內(nèi)部類(lèi)的部分注意事項(xiàng)
這篇文章主要介紹了關(guān)于JavaEE內(nèi)部類(lèi)的部分注意事項(xiàng),將一個(gè)類(lèi)定義在另一個(gè)類(lèi)里面或者一個(gè)方法里面,這樣的類(lèi)稱(chēng)為內(nèi)部類(lèi),這是一種封裝思想,那么使用內(nèi)部類(lèi)的時(shí)候要注意些什么呢,讓我們一起來(lái)看看吧2023-03-03Spring Boot環(huán)境下Mybatis Plus的快速應(yīng)用操作
這篇文章主要介紹了Spring Boot環(huán)境下Mybatis Plus的快速應(yīng)用操作,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11