假如我们想利用包名来生成我们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 |
|
那么SpringBoot怎么知道我们生成这个类呢?我们需要将它加入到IOC容器中。这里采用的是配置类,定义一个配置类实现WebMvcRegistrations接口,并将配置类加入到IOC容器中。
1 |
|
配置文件:
1 | com.sise.ming.api = |
controller:
1 |
|