spring boot 错误处理总结
在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 错误处理总结的更多相关文章
- spring boot错误: 找不到或无法加载主类
一:当在eclipse启动spring boot项目时出现问题: springboot错误: 找不到或无法加载主类 解决办法: 1,通过cmd命令行,进入项目目录进行,mvn clean instal ...
- 16. Spring boot 错误页面
默认效果:1).浏览器,返回一个默认的错误页面 1.1 请求头 1.2返回结果 2).如果是其他客户端,默认响应一个json数据 2.1请求头 2.2返回结果 { "timestamp& ...
- 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 ...
- spring boot 错误处理之深度历险
今天终于把 boot 的异常处理完全研究透了: boot提供了很多错误的处理工作.默认情况下,我们会看到一个whiteLabel(白标)的页面. 这个可能不是我们所需.因此我们需要定制.我于是做了个深 ...
- spring boot 错误,求大神帮解决
Exception in thread "main" java.lang.IllegalStateException: Failed to read Class-Path attr ...
- Spring boot 错误处理机制
请求方式时,若不存在 浏览器出现White label Error Page 错误页面 其他客户端出现响应一个JSON格式文本包含错误码等信息 浏览器发送请求的请求头: 客户端请求头 这样就能区分来自 ...
- Spring boot错误处理以及定制错误页面
如果是浏览器访问,返回错误页面 注意浏览器发送请求的请求头: 注意区别其他客户端哦比如 postman 如果是其他客户端,返回一个Json数据 原理可以参照ErrorMvcAutoConfigura ...
- spring boot 错误:Check your ViewResolver setup
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as ...
- Spring Boot错误errMsg: "request:ok"
在把评论写到数据库并且动态刷新评论区的时候,有时候正常写入,有时候就会有“request:ok”的的错误出现,错误信息如下: data: {timestamp: , error: "Inte ...
随机推荐
- Oracle(二)在 Mysql 的基础上学习 Oracle
毕竟我是先学的mysql,对数据库的一切认知都会有一个先入为主的思想在里面,如果不搞清楚其中的异同,我感觉Oracle我是学不会 了,甚至会把它们混淆.那么,不会mysql的没必要往下看了. 下边第一 ...
- linux ar命令参数及用法详解--linux建立、修改或抽取备存文件命
功能说明:建立或修改备存文件,或是从备存文件中抽取文件. 语 法:ar[-dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>] ...
- cocos2dx开发之util类&方法——字符串替换
/*将originStr字符串中的searchStr替换成replaceStr*/ std::string str_replace(std::string originStr,std::string ...
- Combining Lexical and Grammatical Features to Improve Readability Measures for First and Second Language Texts.-paper
http://www.aclweb.org/anthology/N07-1058 Volume:Human Language Technologies 2007: The Conference of ...
- SQL-记录修改篇-008
修改记录: update table_name as a set a.type = ‘青年' where a.age>18 and a.age<40 解释:将表中age字段大于1 ...
- lucas 模板 洛古模板题
#include<bits/stdc++.h> #define int long long using namespace std; ; int a[maxn]; int quick(in ...
- 基于ajax 验证表单是否被占用----------------附:10.25日总结
总得来说,今天的主要工作是注册页面的处理, 1.判断 用户名与密码是否为空值 ,两次密码框输入的值是否相同.判断邮箱过程中,有使用到正则表达式 2.用户名是否使用过,有用到了json与ajax的知识. ...
- PythonStudy——逻辑运算符 Logical Operators
在Python中,None.任何数值类型中的0.空字符串“”.空元组().空列表[].空字典{}都被当作False,还有自定义类型,如果实现了 __ nonzero __ () 或 __ len __ ...
- 汉语言处理工具pyhanlp的简繁转换
繁简转换 HanLP几乎实现了所有我们需要的繁简转换方式,并且已经封装到了HanLP中,使得我们可以轻松的使用,而分词器中已经默认支持多种繁简格式或者混合.这里我们不再做过多描述. 说明: ·Ha ...
- Mysql数据库主从复制搭建
Mysql数据库主从复制原理: 主库开启bin-log日志,同时生成IO线程.IO线程负责将用户写入数据库的sql语句记录在二进制日志bin-log,该记录过程可并发进行:生成标识号 server i ...