在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. 输入、输出与Mad Libs游戏

    name1 = input('请输入一个名字:') name2 = input('再输入一个名字:') article = input('请输入一种物品:') print('{}掉进了{},{}去救她 ...

  2. Oracle物化视图梳理

    --物化视图可以分为三种类型:* 包含聚集的物化视图* 只包含连接的物化视图* 嵌套物化视图三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大. --物化视图创建方式(Build M ...

  3. L332 NBA: Dwyane Wade and Dirk Nowitzki Say Emotional Goodbyes

    Two games in the NBA ended amid emotional scenes on Tuesday as legends at separate teams marked thei ...

  4. python发送邮箱的小项目

    import smtplibfrom email.mime.text import MIMEText receiver = input('输入接受者邮箱\n')subject = input('输入标 ...

  5. 将100道计算题输出至txt文件,再读取文件至控制台,在控制台中输入答案并评判对错

    我在课堂上基本完成了输出100道题和创建文档,但是因为对输入输出流不熟悉,所以并没有实现将输出的计算题导出到文档里,在课下我又请教了宿舍的大佬,基本完成如下: 源代码: import java.io. ...

  6. L2-010. 排座位(并查集)*

    L2-010. 排座位 参考博客 #include<iostream> #include<math.h> using namespace std; ]; ][]; int fi ...

  7. ES6 promise学习笔记 -- 基本用法

    ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(reso ...

  8. 如何执行Python代码

    1.在linux系统中执行代码有两种方法 a.在脚本的当前目录下执行:python test.py b.给脚本赋予可执行权限,然后执行代码 chmod +x test.py test.py 2.在wi ...

  9. Logging常用handlers的使用

    一.StreamHandler 流handler——包含在logging模块中的三个handler之一. 能够将日志信息输出到sys.stdout, sys.stderr 或者类文件对象(更确切点,就 ...

  10. BSGS模板(慢速)

    //author Eterna #define Hello the_cruel_world! #pragma GCC optimize(2) #include<iostream> #inc ...