我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error
,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。
选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如:
@RequestMapping("/hello")
public String hello() throws Exception {
throw new Exception("发生错误");
}
此时,可以看到类似下面的报错页面,该页面就是Spring Boot提供的默认error映射页面。
统一异常处理
虽然,Spring Boot中实现了默认的error映射,但是在实际应用中,上面你的错误页面对用户来说并不够友好,我们通常需要去实现我们自己的异常提示。
下面我们以之前的Web应用例子为基础(Chapter3-1-2),进行统一异常处理的改造。
- 创建全局异常处理类:通过使用
@ControllerAdvice
定义统一的异常处理类,而不是在每个Controller中逐个定义。@ExceptionHandler
用来定义函数针对的异常类型,最后将Exception对象和请求URL映射到error.html
中
@ControllerAdvice
class GlobalExceptionHandler {
public static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", req.getRequestURL());
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}
}
- 实现
error.html
页面展示:在templates
目录下创建error.html
,将请求的URL和Exception对象的message输出。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title>统一异常处理</title>
</head>
<body>
<h1>Error Handler</h1>
<div th:text="${url}"></div>
<div th:text="${exception.message}"></div>
</body>
</html>
启动该应用,访问:http://localhost:8080/hello
,可以看到如下错误提示页面。
通过实现上述内容之后,我们只需要在Controller
中抛出Exception
,当然我们可能会有多种不同的Exception
。然后在@ControllerAdvice
类中,根据抛出的具体Exception
类型匹配@ExceptionHandler
中配置的异常类型来匹配错误映射和处理。
返回JSON格式
在上述例子中,通过@ControllerAdvice
统一定义不同Exception映射到不同错误处理页面。而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这时候我们也能轻松支持。
本质上,只需在@ExceptionHandler
之后加入@ResponseBody
,就能让处理函数return的内容转换为JSON格式。
下面以一个具体示例来实现返回JSON格式的异常处理。
- 创建统一的JSON返回对象,code:消息类型,message:消息内容,url:请求的url,data:请求返回的数据
public class ErrorInfo<T> {
public static final Integer OK = 0;
public static final Integer ERROR = 100;
private Integer code;
private String message;
private String url;
private T data;
// 省略getter和setter
}
- 创建一个自定义异常,用来实验捕获该异常,并返回json
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
-
Controller
中增加json映射,抛出MyException
异常
@Controller
public class HelloController {
@RequestMapping("/json")
public String json() throws MyException {
throw new MyException("发生错误2");
}
}
- 为
MyException
异常创建对应的处理
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MyException.class)
@ResponseBody
public ErrorInfo<String> jsonErrorHandler(HttpServletRequest req, MyException e) throws Exception {
ErrorInfo<String> r = new ErrorInfo<>();
r.setMessage(e.getMessage());
r.setCode(ErrorInfo.ERROR);
r.setData("Some Data");
r.setUrl(req.getRequestURL().toString());
return r;
}
}
{
code: 100,
data: "Some Data",
message: "发生错误2",
url: "http://localhost:8080/json"
}
至此,已完成在Spring Boot中创建统一的异常处理,实际实现还是依靠Spring MVC的注解,更多更深入的使用可参考Spring MVC的文档。
本文完整示例:chapter3-1-6
文章:
http://www.jianshu.com/nb/3978592
示例:
http://git.oschina.net/didispace/SpringBoot-Learning
相关推荐
然而,在实际应用过程中,开发者会发现Spring Cloud Gateway默认的异常处理机制并不完善,尤其是对于RESTful API而言,默认情况下返回的是HTML格式的错误页面,这显然不符合前后端分离的应用场景。因此,本文将详细...
在这个“springboot整合thymeleaf+maven实现异常处理页面”的案例中,我们将探讨如何在 SpringBoot 应用中整合 Thymeleaf 和 Maven,以及如何设置自定义的全局异常处理机制,使得当应用程序出现异常时,能够优雅地将...
在本实战教程中,我们将深入探讨如何使用Spring Tool Suite (STS) 创建一个全面的Spring Boot应用,涵盖了多个关键领域,包括RESTful接口、数据库交互、用户认证、分布式Token的实现(JWT)、Redis缓存操作、日志...
在IT行业中,异常处理是系统稳定性和健壮性的重要组成部分,尤其是在使用Spring Boot进行Web开发时。本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的...
Spring Boot还提供了强大的错误处理机制,通过全局异常处理器(`@ControllerAdvice`和`@ExceptionHandler`)可以统一处理各种异常。 在测试方面,Spring Boot提供了`@SpringBootTest`注解进行集成测试,`@...
shiro|[授权、认证、加解密、统一异常处理](https://github.com/smltq/spring-boot-demo/blob/master/shiro/HELP.md) sign|[防篡改、防重放、文档自动生成]...
- **异常处理**:统一异常处理机制,提高应用的健壮性和用户体验。 通过以上内容的学习,开发者可以更好地理解如何使用Spring Boot快速搭建和部署Web应用,同时掌握Spring Boot的一些高级特性,从而提高开发效率和...
3. **全局异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以捕获全局异常并返回统一的响应。 **六、Spring Boot 数据访问** 1. **JPA集成**:Spring Boot 支持JPA,可以轻松地与各种数据库(如MySQL...
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。下面这篇文章主要给大家介绍了关于Spring Boot学习入门之统一异常处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
- Spring Boot提供了统一的异常处理机制,可以自定义错误页面和返回格式。 - 日志框架如Logback或Log4j用于记录系统运行情况,便于调试和监控。 **8. 测试支持** - Spring Boot包含JUnit和Mockito等测试工具的支持...
10. **错误处理和日志记录**:Spring Boot提供了统一的异常处理机制和日志框架集成,如Logback或Log4j,方便记录和分析应用运行时的错误和信息。 11. **单元测试和集成测试**:Spring Boot 提供了测试支持,可以...
在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了构建微服务和Web应用程序的过程。本项目聚焦于一个特定的应用场景:通过经纬度坐标来确定所在行政区域。这一功能在许多领域都有广泛的应用,例如地图...
Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始设置和开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地创建生产级别...
- **案例二:高性能Web应用开发**:利用Spring Boot搭建高并发Web应用时,可以通过整合Nginx作为反向代理服务器来分发请求,同时采用WebSocket技术实现实时双向通信。 - **案例三:数据持久层优化**:针对数据库操作...
总的来说,这个项目提供了一个完整的Spring Boot和Mybatis集成方案,涵盖了开发过程中的多个重要方面,如自动化工具、异常处理和拦截器,这对于构建高效且可维护的Web应用来说是非常有益的。同时,通过`...
Spring Boot作为一款流行的Java开发框架,提供了便捷的方式来实现统一异常处理。本文将深入探讨如何在Spring Boot中进行全局异常处理。 首先,Spring Boot默认提供了一个“error”映射,但其提供的错误页面并不适合...
4. **错误处理**:Spring Boot 提供了统一的异常处理机制,通过 `@ExceptionHandler` 注解可以捕获并处理特定的运行时异常。 5. **安全模块**:Spring Security 可以方便地集成到Spring Boot应用中,提供身份验证和...
- chapter3-1-6:[统一异常处理](http://blog.didispace.com/springbootexception/) ### 数据访问 - chapter3-2-1:[使用JdbcTemplate](http://blog.didispace.com/springbootdata1/) - chapter3-2-2:[使用Spring...
这篇博客“后端异常统一处理解决方案”主要探讨了如何在Spring Boot、SSM(Spring、Spring MVC、MyBatis)框架中有效地管理和处理异常,提供了一种优化的方法来提升应用程序的健壮性。 首先,Spring Boot以其简洁的...