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 ...
随机推荐
- npm 基本使用命令
NMP 本地 远程npm install uglify-js --globalnpm install underscore@1.8.2 指定版本 npm update underscore npm s ...
- dyne*cm and N*m
- js计算两个日期相差天数
//两个时间相差天数 兼容firefox chrome var days = function(startDate) { var sdate = new Date(startDate.replace( ...
- java面向对象编程(三)--this
看一段代码:(Demo112.java),先了解为什么要使用this. /* this的必要性 */ public class Demo112{ public static void main(Str ...
- TestLink测试管理工具的使用说明
1. 创建项目: 主页左边的列表栏有 “Test Project management”的菜单,子菜单中有 “ create new test project”,通过它可以创建新的测试项目. 同时,菜 ...
- wc语法
统计当前目录下的所有文件行数: wc -l * 当前目录以及子目录的所有文件行数: find . * | xargs wc -l 可以把*改成所要匹配的文件,例如Java文件,*.java这样就只统 ...
- Shiro 整合SpringMVC 并实现权限管理,登录和注销
Shiro 整合SpringMVC 并且实现权限管理,登录和注销 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring S ...
- 云南-第一个应用节点-ssh登录-卡顿的问题
云南电信,从管理节点ssh连接到第一个应用节点,出现延迟卡顿的问题,解决方法: systemctl restart systemd-logind.service 附: 操作系统类型: SLES ...
- 行高(line-height)
line-height属性 设置元素中文本行高.
- 初学vue----动画过渡transition简单部分
使用动画效果要用transition包裹,transition(<trsnsition name="xx"><div></div></tr ...