在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. python 文件读写时用open还是codecs.open

    当我面有数据需要保存时,第一时间一般会想到写到一个txt文件中,当然,数据量比较大的时候还是写到数据库比较方便管理,需要进行网络传输时要序列化,json化.下面主要整理一下平时用的最多的写入到文件中, ...

  2. 开发方式-----C语言

    上期我们已经把C语言的开发平台搭建好了,还有不清楚地可以查看我上一篇的笔记,这次我们就要进行编辑C语言,那么它到底是怎么实现开发的呢?这一期我就来演示一次开发方式,至于说明为什么会这样或者这个是什么意 ...

  3. repeter 控制一行中显示几条内容

    repeter  控制一行中显示几条内容 <asp:Repeater ID="Repeater1" runat="server" DataSourceID ...

  4. sails.js mvc framework learning

    目的:加快开发速度,总结使用方法: menu list: custom controller custom 模块使用 custom model custom middleware custom ser ...

  5. PythonStudy——进制 System of numeration

    十进制 人类天然选择了十进制. 二进制 二进制有两个特点:它由两个数码0,1组成,二进制数运算规律是逢二进一. 四进制 四进制是以4为基数的进位制,以 0.1.2 和 3 四个数字表示任何实数. 七进 ...

  6. java中URL和File的相互转化

    首先,想比较一下这两者的不同.URL用于网络,所以带有明显的protocol,而且对于中文及符号支持的很不好.File就是我们平常系统中的文件路径了,对于中文及符号都支持,但是已经没有protocol ...

  7. 使用FileZilla连接时超时,无法连接到服务器

    更改一下加密方式,就是不用TLS,用相对不安全方式的(可选项)  腾讯云就是这样的,

  8. sqluldr2 学习心得

    前言 最近正在做一个项目,需要导出数据库中的表,单数数据库中有很多带有虚拟列的表,而且表中的数据非常的庞大,有些表中的数据上亿条,项目经理让我研究如何快速导出这些数据. 下面是我研究的一些经历: (1 ...

  9. 2017第45周一java多线程创建方法

    1. 从JDK1.5开始,Java提供了3种方式来创建,启动多线程: Ø 继承Thread类来创建线程类,重写run()方法作为线程执行体. Ø 实现Runnable接口来创建线程类,重写run()方 ...

  10. Django学习笔记之数据库-QuerySet_API

    QuerySet API 我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作.其实模型名字.objects是一个django.db.models.manager.Manager对 ...