SpringBoot如何根據目錄路徑生成接口的url路徑
根據目錄路徑生成接口的url路徑
首先我們新建一個AutoPrefixUrlMapping類,繼承自RequestMappingHandlerMapping,用以獲取新的url
public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping { // 從配置文件中讀取根目錄 @Value("${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); RequestMappingInfo newMappingInfo = RequestMappingInfo.paths(prefix).build().combine(mappingInfo); return newMappingInfo; } return mappingInfo; } // 獲取前綴 private String getPrefix(Class<?> handlerType){ String packageName = handlerType.getPackage().getName(); String newPath = packageName.replaceAll(this.apiPackagePath, ""); return newPath.replace(".","/"); } }
配置文件application.proprties如下
api-package = com.lyn.miniprogram.api
用以聲明url的根目錄
然後我們創建一個AutoPrefixConfiguration類,用以將AutoPrefixUrlMapping加入Springboot的容器中
@Component public class AutoPrefixConfiguration implements WebMvcRegistrations { @Override public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { return new AutoPrefixUrlMapping(); } }
測試接口如下:
url會自動帶上 /v1的前綴,測試通過!當然,如果目錄層級更復雜,通過上述代碼也是可以實現的。
springboot接口請求界面路徑返404
springboot正常啟動項目,訪問接口均正常,新增一接口請求界面路徑,訪問該接口報錯404
idea springboot
http://localhost:8080/cuer/apSw?ad=2893e6fce42&_=161607509 404
接口沒被掃描到
百度說是接口所在包放置位置不對,導致接口沒被掃描到,但是我的情況是系統原本存在的接口都可以訪問到,並且新接口所在位置與舊接口所在位置一致。且查看新接口包與 spring boot啟動類的位置符合可被掃描到情況,故排除新接口包放置位置不對的情況
配置或代碼寫法問題
查看後端接口代碼寫法沒錯
查看調用後端接口傳參是否錯誤(接口有參數,直接不傳參http://localhost:8080/cuer/apSw,打斷點 訪問接口,可以進入到接口,說明接口沒錯)斷點往下打,發現是return 頁面報404 ,比對後發現,頁面路徑對應根本沒頁面,修改頁面路徑重新訪問,成功。
@Slf4j @Controller @RequestMapping(value = {"/customer"}) @AllArgsConstructor public class CerCustomerController { private final PsionsUtil pnsUtil; private final ICCredService crdService; private final ICrEvalService ervice; /** * 跳轉到列表界面 * * @return */ @GetMapping("/index") public String customerCredIndex() { return "/business/customer/index"; } /** * 跳轉到查看界面 * * @return */ @GetMapping("/apeShw") public String apseShw(String ad, Model model) { model.addAttribute(“apId”, aId); if (“CD”.equals(perUtil.getreTpe())) { return “/bess/cuer/evfo”; } else { CeerVo ceo = creice.gtCByAlyId(ad); model.addAttribute(“cd”, cVo); return “/busis/cr/co”; } } }
最後
找瞭挺久,有點坑哦,前端調用寫錯字母,就烏龍瞭
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringBoot根據目錄結構自動配置Url前綴方式
- SpringBoot根據目錄結構自動生成路由前綴的實現代碼
- Java中Controller引起的Ambiguous mapping問題及解決
- SpringBoot如何實現接口版本控制
- Java工具類之@RequestMapping註解