Springboot全局异常处理:自定义错误页面与JSON响应
版权申诉
5星 · 超过95%的资源 55 浏览量
更新于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
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析