在boot 中, 对404  和 异常 有了额外的处理。 当然,我们可以定制, 如何做呢?

1 写一个继承 ErrorController 的Controller

注意, 这里一定要继承 ErrorController 。 否则就boot会 启动失败,因为mapping 冲突, 因为不允许两个相同的 /error 映射嘛!

@Controller
public class ErrContrller implements ErrorController { // @Override
public String getErrorPath() { // 发现这里的 getErrorPath 完全没卵用! 返回什么值都可以, 不知道为什么。
return "/error123";
} @RequestMapping("/error") // 这里的路径 就是boot 的异常请求的指向的路径。 可以再 application.properties里面配置, 当然, 需要这这里匹配
// @ResponseBody
public String err(HttpServletRequest request, HttpServletResponse response) {
System.out.println("request = [" + request + "], response = [" + response + "]");
return "someErr";
} @RequestMapping("/eeeeeeeeee")
// @ResponseBody
public String login(HttpServletRequest request, HttpServletResponse response) {
return "login";
}

写一个继承 ErrorController 的Controller 之后, boot 中原来的 BasicErrorController 就失效了, 那就是说 这样后 boot 不会对 404 进行额外处理。(但是异常还是会的? )。 因为 它是一个条件 bean。

2 注册一个 EmbeddedServletContainerCustomizer

如下:

@Configuration
public class ErrorPageConfig {
public static Logger logger = LoggerFactory.getLogger(ErrorPageConfig.class);
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return (ConfigurableEmbeddedServletContainer container) -> {
/**
* 页面异常错误
*/
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error2/4xx")); 这里的value 如果是 html 结尾的, 那么就直接查找对应的html, 否则就会 再次转发请求给 spring mvc
container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500"));
};
}
}

那么,EmbeddedServletContainerCustomizer 的作用点是  ? 前面的博客已经有讲过啦。

有了它之后, 貌似所有的ErrorController 全部失效, 包括BasicErrorController   和上面自定义的 ErrorController 。 当然,之前在ErrorController 配置的 @RequestMapping("/error")  等 /error 配置还是有用的, 只不过是, boot 不在会转发 到这来了。!!

3 配置@ControllerAdvice  和 @ExceptionHandler

当然, 这个其实就是spring mvc  的范畴了。 而且 @ExceptionHandler 只能处理 异常, 不能处理 404 :

@ControllerAdvice
public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class)
@ResponseBody
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e){
System.out.println("req = [" + req + "], e = [" + e + "]");
ModelAndView modelAndView =new ModelAndView();
modelAndView.addObject("exception",e);
modelAndView.addObject("url",req.getRequestURI());
modelAndView.setViewName("error");
return modelAndView;
}
}

spring boot 错误处理总结的更多相关文章

  1. spring boot错误: 找不到或无法加载主类

    一:当在eclipse启动spring boot项目时出现问题: springboot错误: 找不到或无法加载主类 解决办法: 1,通过cmd命令行,进入项目目录进行,mvn clean instal ...

  2. 16. Spring boot 错误页面

      默认效果:1).浏览器,返回一个默认的错误页面 1.1 请求头 1.2返回结果 2).如果是其他客户端,默认响应一个json数据 2.1请求头 2.2返回结果 { "timestamp& ...

  3. Spring Boot错误——SpringBoot 2.0 报错: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

    背景 使用Spring Cloud搭建微服务,服务的注册与发现(Eureka)项目启动时报错,错误如下 *************************** APPLICATION FAILED T ...

  4. spring boot 错误处理之深度历险

    今天终于把 boot 的异常处理完全研究透了: boot提供了很多错误的处理工作.默认情况下,我们会看到一个whiteLabel(白标)的页面. 这个可能不是我们所需.因此我们需要定制.我于是做了个深 ...

  5. spring boot 错误,求大神帮解决

    Exception in thread "main" java.lang.IllegalStateException: Failed to read Class-Path attr ...

  6. Spring boot 错误处理机制

    请求方式时,若不存在 浏览器出现White label Error Page 错误页面 其他客户端出现响应一个JSON格式文本包含错误码等信息 浏览器发送请求的请求头: 客户端请求头 这样就能区分来自 ...

  7. Spring boot错误处理以及定制错误页面

    如果是浏览器访问,返回错误页面 注意浏览器发送请求的请求头:  注意区别其他客户端哦比如 postman 如果是其他客户端,返回一个Json数据 原理可以参照ErrorMvcAutoConfigura ...

  8. spring boot 错误:Check your ViewResolver setup

    Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as ...

  9. Spring Boot错误errMsg: "request:ok"

    在把评论写到数据库并且动态刷新评论区的时候,有时候正常写入,有时候就会有“request:ok”的的错误出现,错误信息如下: data: {timestamp: , error: "Inte ...

随机推荐

  1. 马凯军201771010116《面向对象程序设计(java)》第二周学习总结

    第一部分:理论知识学习部分 (1)基本知识:简单应用程序的结构:Java环境里的注释方式: (2)数据类型(4种整型.2种浮点型.1种字符型‘char’.真值型‘Boolean’. (3)变量,每个变 ...

  2. ipa 注入 dylib

    前些日子再github找到了一个内存修改器 DLGMemor 免越狱在app内植入修改器,感觉很不错,就尝试去看看是否可行. 用到的工具:  Xcode 10. optool 首先要做的,安装 opt ...

  3. 03_安装vsftp服务器

    1 安装vsftpd组件 [root@bogon ~]# yum -y install vsftpd 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. 2 添 ...

  4. java基础(5)内部类

    1 成员内部类的定义和使用 public class Outer { private String name; public class Inner { public void innerMethod ...

  5. 九度OJ-第5章-图论

    二.并查集 1. 例题 题目1012:畅通工程 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10519 解决:4794 题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出 ...

  6. SQLI DUMB SERIES-9&&10

    第五关.第八关以及第九关.第十关都是使用盲注,除了第五关说的双注入外,也可使用时间注入法 (1)无论输入啥,都回显相同 (2) ?id=1' and sleep(3) --+ 发现有明显延迟,说明可以 ...

  7. day02python 整型 布尔

    今日内容 int bool 详细内容 1.整型(int) Py2 32位电脑 64位电脑 超出范围后python将自动转换成long(长整型) /运算不能显示小数-> (整形除法只能保留整数位) ...

  8. 创建java类并实例化类对象

    创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...

  9. hdu5001 Walk 概率DP

    I used to think I could be anything, but now I know that I couldn't do anything. So I started travel ...

  10. GitHub命令更新

    github命令 1.git clone url 从远程master拉代码 2.进入目录 3.拉下来之后,git branch,查看本地分支是否为master,不是的话git checkout mas ...