需求:制定一個目錄為“根目錄”列粪,從這個目錄開始以下的子目錄都加入到路由中
例子:如下目錄結(jié)構(gòu)讨衣,要訪問banner中的list接口,要達(dá)到目的 /api/v1/open/banner/list
cn.wangningbo.mall
api
v1
admin
portal
open
BannerController.java
service
MallApplication.java
@RestController
@RequestMapping("/banner")
public class BannerController{
@GetMapping("/list")
public List authorizationRedirectUrl() {
}
}
實(shí)現(xiàn)步驟
mall:
# 路由生成包路徑
api-package: cn.wangningbo.mall.api
/**
* 自定義 RequestMappingHandlerMapping
* @author wangningbo
*/
public class AutoPrefixUrMapping extends RequestMappingHandlerMapping {
@Value("${mall.api-package}")
private String apiPackagePath;
@Override
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
RequestMappingInfo mappingInfo = super.getMappingForMethod(method, handlerType);
if (mappingInfo != null) {
String prefix = this.getPrefix(handlerType);
return RequestMappingInfo.paths(prefix).build().combine(mappingInfo);
}
return mappingInfo;
}
/**
* 獲取路由前綴
*
* @param handlerType
* @return
*/
private String getPrefix(Class<?> handlerType) {
String packageName = handlerType.getPackageName();
String doPath = packageName.replaceAll(this.apiPackagePath, "");
return doPath.replace(".", "/");
}
}
/**
* 納入容器管理,讓W(xué)ebMvcRegistrations使用自定義的AutoPrefixUrMapping
* @author wangningbo
*/
@Component
public class AutoPrefixConfiguration implements WebMvcRegistrations {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new AutoPrefixUrMapping();
}
}