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键不松手,鼠标悬浮到要跳转的路径上。
再次点击鼠标,能打开对应页面就说明没有问题。