1.情景展示
當請求不存在時,服務器會報404異常,這對於產品用戶來說不夠友好。
2.原因分析
可以配置404請求錯誤頁來進行友好的錯誤提示。
3.解決方案
方式一:
@GetMapping("*") public String notFound() { // 跳轉到404頁面所在路徑 return "404"; }
這種方式,同樣適用於springmvc,所有不存在的請求都會映射到該方法上。
但是,問題在於如果項目配置了knife4j項目接口文檔,對應的請求是:/doc.html,只有在請求該地址時,項目才會運行生成doc.html,不請求就不存在,因為是臨時生成的html文件,原本並不存在於項目當中,所以,在生成頁面之前,該方法檢測到服務器並不存在doc.html,因此跳轉到了404.jsp,就這樣,永遠也訪問不到doc.html,我們也就無法使用knife4j了。
方式二:
為了解決這個問題,我們就不能再使用方式一了。
第一步:添加配置類
/** * 錯誤頁 * @description: ErrorPage(status,path)說明 * 關於path,既可以重定向具體的html也可以重定向請求地址 * 如果配置的是404.html一定要建在template/static下面,否則無效。 * 如果配置的是/404,那就需要在Controller中添加/404請求對應的方法 * @author: Marydon * @date: 2020年08月11日 0011 11:25 */ @Configuration public class ErrorConfig implements ErrorPageRegistrar { @Override public void registerErrorPages(ErrorPageRegistry registry) { ErrorPage[] errorPages = new ErrorPage[1]; errorPages[0] = new ErrorPage(HttpStatus.NOT_FOUND, "/404.do"); registry.addErrorPages(errorPages); } }
第二步:在控制器中添加/404.do請求
/** * 不存在的請求,跳轉到404頁面 * @description: ErrorConfig已經攔截了404請求,然后映射到這個請求上 * @date: 2020年07月10日 0010 17:10 * @param: * @return: java.lang.String */ @GetMapping("/404.do") public String notFound() { // 跳轉到404頁面:/jsp/404.jsp return "404"; }
需要提醒的是:即將跳轉的頁面,必須是相對於項目來說的絕對路徑。
上面是因為我配置了響應路徑的前綴和后綴,實際是:/jsp/404.jsp。
2020-12-27
這里,說一個在idea中的小技巧,要想知道自己配置的文件路徑對不對,可以這樣:
按住Ctrl鍵不松手,鼠標懸浮到要跳轉的路徑上。
再次點擊鼠標,能打開對應頁面就說明沒有問題。