宁鸣而死,不默而生。------胡适 宁鸣而死,不默而生。------胡适
在开发中我们经常看到这样一个页面
意思是告诉你,没有映射到/error
对应的视图
这个是从哪里出现的呢?
我们找到org.springframework.boot.autoconfigure.web.servlet.error
包下面
这里我们看到ErrorMvcAutoConfiguration
,因为springboot
自动装配就是这些xxxAutoConfiguration
去完成的
打开一看,发现:诶?!这里有这样一段代码
这段代码告诉我们,如果在没注入ErrorViewResolver
并且注入了DispatcherServlet
这个bean
的情况下,则注入一个叫DefaultErrorViewResolver
的bean
如果你现在就想知道怎么修改默认的/error
路径映射?
那可以直接注入一个ErrorViewResolver
在你的任意一个配置类中,我建议是放到Mvc
配置类中
|---------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| hljs java /** * web配置类 * * @author <achao1441470436@gmail.com> * @since 2021/5/18 0018 14:52 */ @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { /** * 不要默认跳转error页面配置 * * @return org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver * @author <achao1441470436@gmail.com> * @since 2021/5/22 0022 21:59 */ @Bean public ErrorViewResolver errorViewResolver() throws IOException { return (request, status, model) -> { // 进行你的配置,如我这里是抛出异常然后统一处理,根据实际业务需求去做 // throw new MybatisPlusException("无法解析视图"); }; } }
|
那我们接着来探讨,为什么默认会跳转到/error
页面呢?
因为我们如果没注入ErrorViewResolver
的话,ErrorMvcAutoConfiguration
里
里注入了DefaultErrorViewResolver
而里面对于ErrorViewResolver
接口的实现是
|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11
| hljs java @Override public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { // 找到对应状态码的 error/xxx 页面,例如找到 error/404 ModelAndView modelAndView = resolve(String.valueOf(status.value()), model); if (modelAndView == null && SERIES_VIEWS.containsKey(status.series())) { // 如果没找到上面的页面,并且status.series等于4或者5的时候,则找4xx或者5xx视图 modelAndView = resolve(SERIES_VIEWS.get(status.series()), model); } // 然后返回 return modelAndView; }
|
找不到这些页面的话
自然而然就会返回默认的org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration.StaticView
而里面的实现
正好是我们一开始看到的错误页面啦~
所以再说一遍,配置如下即可
|---------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| hljs java /** * web配置类 * * @author <achao1441470436@gmail.com> * @since 2021/5/18 0018 14:52 */ @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { /** * 不要默认跳转error页面配置 * * @return org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver * @author <achao1441470436@gmail.com> * @since 2021/5/22 0022 21:59 */ @Bean public ErrorViewResolver errorViewResolver() throws IOException { return (request, status, model) -> { // 进行你的配置,如我这里是抛出异常然后统一处理,根据实际业务需求去做 // throw new MybatisPlusException("无法解析视图"); }; } }
|