Springboot全局异常处理:自定义错误页面与JSON响应
版权申诉
5星 · 超过95%的资源 4 浏览量
更新于2024-09-11
收藏 1.6MB PDF 举报
在Spring Boot应用中,全局化处理异常信息是一个重要的需求,特别是当需要自定义错误页面、根据异常类型返回不同信息以及根据不同请求地址选择返回页面或JSON时。本文将介绍如何通过ControllerAdvice、ErrorController和Filter结合来实现这些功能。
首先,自定义error页面是通过实现ErrorController接口来完成的。Spring Boot提供了`org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController`作为基础类,开发者可以继承这个类并在其中覆盖关键方法,如`getErrorPath()`来指定错误页面的URL路径,`getResponseBody()`用于返回JSON格式的错误信息。以下是一个简单的自定义ErrorController示例:
```java
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyControllerAdvice implements ErrorController {
private static final Logger logger = LoggerFactory.getLogger(MyControllerAdvice.class);
@Override
public String getErrorPath() {
return "/my-error-page"; // 自定义的错误页面路径
}
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<Map<String, Object>> handleException(Exception ex, HttpServletRequest request) {
Map<String, Object> responseModel = new HashMap<>();
responseModel.put("message", "发生错误");
responseModel.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value());
// 根据异常类型或请求信息动态决定是否返回JSON
if (shouldReturnJson(request)) {
responseModel.put("detail", ex.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseModel);
} else {
// 返回错误页面
ModelMap model = new ModelMap();
model.addAttribute("error", ex.getMessage());
return new ModelAndView("/my-error-template", model);
}
}
private boolean shouldReturnJson(HttpServletRequest request) {
// 逻辑判断条件,例如根据URL路径、请求头等信息判断返回JSON
// 这里仅作示例,实际应用中需要根据具体业务场景实现
String requestPath = request.getRequestURI();
return !requestPath.endsWith(".html") || "json".equals(request.getHeader("Accept"));
}
}
```
在这个示例中,`handleException`方法负责捕获并处理所有类型的异常。如果满足返回JSON的条件(这里简单地假设非HTML请求或Accept头包含"json"),则返回一个包含错误信息的JSON响应;否则,调用`ModelAndView`来渲染自定义的错误页面。
为了进一步增强灵活性,还可以考虑添加一个Filter来辅助处理异常。Filter可以在请求到达Controller之前检查,根据需要修改请求上下文或决定如何处理异常。这可以用于更精细的逻辑控制,比如记录日志、发送监控警报等。
通过Spring Boot的ControllerAdvice、ErrorController和Filter的协同工作,我们可以实现自定义错误页面、针对不同异常返回定制化的错误信息,并根据请求特性灵活地选择返回页面还是JSON格式。这样既提升了用户体验,也增强了应用程序的健壮性。
2020-08-26 上传
2020-10-15 上传
2021-10-01 上传
2015-07-02 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38725902
- 粉丝: 4
- 资源: 929
最新资源
- lianjia-spider:链家二手房爬虫,支持爬取指定城市,户型,价位二手仓库,并通过电子提供跨平台UI,可记录历史价格,售出仓库等信息
- NetCDF数据在ArcMap中的使用
- spark-ifs:使用Apache Spark在大型数据集上基于迭代过滤器的特征选择
- quazip 压缩解压库 qt c++
- my-max-gps
- elastic
- 图像相似度识别比较案例
- WuBinCPP-MCU_Font_Release-master.zip
- eslint-plugin-no-es2015:一些禁用es2015的eslint规则
- 购物
- DotNetHomeWork:武汉大学周三上软件构造基础作业仓库
- linkedin-clone:LinkedIn Clone由React和Redux制作
- 实用数据分析:利用python进行数据分析
- Noobi:一个执行Shellcode的简单工具,能够检测鼠标移动
- Codecademy项目:学习数据科学时完成的项目
- separator-escape