首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >springboot默认跳转/error页面变更

springboot默认跳转/error页面变更

作者头像
阿超
发布2022-08-16 20:19:12
发布2022-08-16 20:19:12
1.4K0
举报
文章被收录于专栏:快乐阿超快乐阿超

宁鸣而死,不默而生。——胡适

宁鸣而死,不默而生。——胡适

在开发中我们经常看到这样一个页面

意思是告诉你,没有映射到/error对应的视图

这个是从哪里出现的呢?

我们找到org.springframework.boot.autoconfigure.web.servlet.error包下面

这里我们看到ErrorMvcAutoConfiguration,因为springboot自动装配就是这些xxxAutoConfiguration去完成的

打开一看,发现:诶?!这里有这样一段代码

这段代码告诉我们,如果在没注入ErrorViewResolver并且注入了DispatcherServlet这个bean的情况下,则注入一个叫DefaultErrorViewResolverbean

如果你现在就想知道怎么修改默认的/error路径映射?

那可以直接注入一个ErrorViewResolver

在你的任意一个配置类中,我建议是放到Mvc配置类中

代码语言:javascript
复制
/**
 * 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接口的实现是

代码语言:javascript
复制
@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

而里面的实现

正好是我们一开始看到的错误页面啦~

所以再说一遍,配置如下即可

代码语言:javascript
复制
/**
 * 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("无法解析视图");
        };
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档