kim.zhang

风在前,无惧!


  • 首页

  • 标签42

  • 分类12

  • 归档94

  • 搜索

修改路由前缀.md

发表于 2020-08-10 更新于 2021-11-21 分类于 SpringBoot
本文字数: 1.8k 阅读时长 ≈ 2 分钟

假如我们想利用包名来生成我们url的前缀,比如包名为com.sise.ming.api.v1.BannerController。我们希望指定一个api-package=com.sise.ming.api后,springBoot自动将我们的路由映射为/v1/。

实现这个功能需要修改SpringBoot的源码。需要继承RequestMappingHandlerMapping,且实现getMappingForMethod方法,将其返回的RequestMappingInfo修改为我们自己的RequestMappingInfo。

apiPackage是在配置文件中通过@Value注入的,且这个配置文件应该是SpringBoot默认的application.properties或者application.yml文件,因为我们没有使用@PropertySource来指定配置文件。

此外还需注意的是,@Value注入属性,需要getter,setter方法,这里使用Lombok。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Getter
@Setter
public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {

@Value("${api-package}")
private String apiPackage;

@Override
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
RequestMappingInfo requestMappingInfo = super.getMappingForMethod(method, handlerType);
if (requestMappingInfo != null) {
String prefix = this.getPrefixUrl(handlerType);
return RequestMappingInfo.paths(prefix).build().combine(requestMappingInfo);
}
return requestMappingInfo;
}

/**
* get requestMapping package name and replace prefix
*
* @param handlerType the handlerType of requestMapping
* @return thr prefix of package name
*/
private String getPrefixUrl(Class<?> handlerType) {
String packageName = handlerType.getPackage().getName();
// replace package prefix to empty string
String dotPath = packageName.replaceAll(this.apiPackage, "");
dotPath = dotPath.replace(".", "/");
return dotPath;
}

}

那么SpringBoot怎么知道我们生成这个类呢?我们需要将它加入到IOC容器中。这里采用的是配置类,定义一个配置类实现WebMvcRegistrations接口,并将配置类加入到IOC容器中。

1
2
3
4
5
6
7
@Component
public class AutoPrefixUrlConfiguration implements WebMvcRegistrations {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new AutoPrefixUrlMapping();
}
}

配置文件:

1
api-package = com.sise.ming.api

controller:

1
2
3
@RestController
@RequestMapping("/banner")
public class BannerController {...}
一毛也是爱~
Kim.Zhang 微信支付

微信支付

# 修改路由前缀
SpringBoot热部署.md
SpringBoot日志.md
Kim.Zhang

Kim.Zhang

且行且珍惜
94 日志
12 分类
42 标签
E-Mail Weibo
粵ICP备19091267号 © 2019 – 2022 Kim.Zhang | 629k | 9:32
本站总访问量 4 次 | 有 309 人看我的博客啦 |
博客全站共176.7k字
载入天数...载入时分秒...
0%