SpringBoot2.x實現(xiàn)給Controller的RequestMapping添加統(tǒng)一前綴
給Controller的RequestMapping添加統(tǒng)一前綴
如何給Controller的RequestMapping添加統(tǒng)一前綴,比如"/api",為什么要添加統(tǒng)一訪問前綴,其實是為了后面的接口的管理。
切記:約定與規(guī)范好過一切技術(shù)處理 !
比如:
- 項目A必須所有訪問接口URL必須增加 /api/projectA/
- 項目B必須所有訪問接口URL必須增加 /api/projectB/
- 看到url里面含有/api 表示訪問后端接口服務(wù),/projectA/ 一看就知道是項目A提供的服務(wù)接口。
總結(jié)一下 有幾個方法
1、在配置application.yml文件中添加:
? servlet: ? ? context-path: /api #(不同SpringBoot版本會有區(qū)別,這里是采用2.x)
但是這個其實是整個項目訪問前綴,如果你有靜態(tài)資源也需要增加 /api 這個前綴訪問。
2、通過nginx 和 你的網(wǎng)關(guān)層 添加統(tǒng)一的訪問路徑前綴,這個不多說了。
3、springMVC 可以實現(xiàn) WebMvcConfigurer 接口中的 configurePathMatch 方法來實現(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)一的后臺接口訪問路徑的前綴
* @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));
}
}
意思是 對有 @ApiRestController 注解的 controller 添加 /api前綴,對有@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 = "【測試接口】")
@ApiRestController("demoUser")
public class DemoUserController extends BaseController{
}其中 ApiPathProperties 是統(tǒng)一前綴名稱管理,可以在yml中修改,我這里設(shè)置了兩個 一般的CRUD接口 /api , 報表服務(wù)接口 統(tǒng)一為 /api/report,各自看各自服務(wù)定到底設(shè)置幾個。
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文件中添加如下
## 專門針對 Controller層接口路徑前綴全局配置 api: ? path: ? ? global-prefix: api ? ? report-prefix: api/report
springboot項目添加全局前綴
spring的配置
spring.application.name: article (spring boot下無效)
spring boot的配置
(springboot你自己設(shè)置的前綴名稱)
properties文件
server.servlet.context-path: /springboot
yml文件
server: ? servlet: ? ? context-path: /springboot
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解析Mybatis SqlSessionFactory初始化原理
本文主要介紹了Mybatis SqlSessionFactory初始化原理,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2021-07-07
Java畢業(yè)設(shè)計實戰(zhàn)之醫(yī)院心理咨詢問診系統(tǒng)的實現(xiàn)
這是一個使用了java+Spring+Maven+mybatis+Vue+mysql開發(fā)的醫(yī)院心理咨詢問診系統(tǒng),是一個畢業(yè)設(shè)計的實戰(zhàn)練習,具有心理咨詢問診該有的所有功能,感興趣的朋友快來看看吧2022-01-01
聊聊spring boot的WebFluxTagsProvider的使用
這篇文章主要介紹了聊聊spring boot的WebFluxTagsProvider的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
IDEA使用學生郵箱無法注冊問題:JetBrains Account connection error: 拒絕連接
這篇文章主要介紹了IDEA使用學生郵箱無法注冊問題:JetBrains Account connection error: 拒絕連接,文中通過圖文及示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07

