使用@ControllerAdvice和@ExceptionHandler两个注解实现Controller层的全局异常统一处理。
特别介绍:
用@ModelAttributes注解标注的方法用于将属性值收集到一个Model类中,并应用到所有的Controller上。
GlobalExceptionHandler类源码:
@ControllerAdvice //@RestControllerAdvice //全部异常处理返回json时可以使用此Advice public class GlobalExceptionHandler { public static final String DEFAULT_ERROR_VIEW = "error"; /** * 返回json格式的异常信息 * RestException为自定义异常类 */ @ResponseBody @ExceptionHandler(value = RestException.class) public Map<String, String> restErrorHandler(RestException ex) { Map<String, String> map = new HashMap<String, String>(); map.put("code", ex.getCode()); map.put("message", ex.getMessage()); return map; } /** * 文件上传异常 */ @ExceptionHandler(MultipartException.class) public ModelAndView multipartErrorHandler(MultipartException ex){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("url", ""); modelAndView.addObject("exception", "文件上传出错:" + ex.toString()); modelAndView.setViewName(DEFAULT_ERROR_VIEW); return modelAndView; } /** * 异常信息显示到error.ft页面 */ @ExceptionHandler(value = Throwable.class) public ModelAndView defaultErrorHandler(HttpServletRequest request, Throwable ex) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("url", request.getRequestURL()); modelAndView.addObject("exception", ex); modelAndView.setViewName(DEFAULT_ERROR_VIEW); return modelAndView; } /** * 把值绑定到Model中,使全局@RequestMapping可以获取到该值,通过 ModelMap 获取 */ @ModelAttribute public void addAttributes(Model model) { model.addAttribute("author", "cjm"); } }
使用全局参数author:
@Controller public class IndexController { @RequestMapping("/main") public String main(ModelMap modelMap) { System.out.println(modelMap.get("author")); return "main"; } }
error.ftl文件:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8" /> <title>统一异常处理</title> </head> <body> <h1>Error Handler</h1> <div>url: ${url?if_exists}</div> <#if exception?has_content><div>error message: ${exception?string}</div></#if> </body> </html>
相关推荐
微信小程序Artandw_eapp-artand
本项目是一款基于Vue和JavaScript开发的心旅途个性化推荐旅游平台设计源码,整合了513个Java文件、76个PNG图片、70个XML配置文件、62个JavaScript文件、42个Vue组件文件、28个CSS样式文件、22个HTML文件、18个YAML配置文件、16个属性文件、11个Vue模板文件,总计919个文件。平台采用现代化前端技术堆栈,旨在为用户提供个性化的旅游推荐服务。
微信小程序开发地图演示、地图导航、标记标注_echat-weapp-mpdemo
Vue和Axios文件
该项目为基于Python语言开发的HTML与任务清单关系系统,包含50个文件,其中16个为HTML文件,14个为Python源代码文件,其余包括Python编译文件、Markdown文件、图片、数据库文件、配置文件、模板文件、文本文件等,旨在为用户提供简单便捷的生活时间段安排及任务规划管理工具。
全国大学生电子设计大赛项目合集全国电赛优秀作品大学生电子竞赛历届题目
该项目是一款基于Python和pygame引擎开发的植物大战僵尸游戏,包含125个文件,涵盖93个PNG图像文件、11个Python源代码文件、10个Python字节码文件、8个GIF动画文件、1个Git忽略配置文件、1个JSON数据文件以及1个Markdown说明文件。游戏设计源码为学习游戏开发提供了丰富的实践素材。
本项目是一款以Java为核心开发的Qiniu服务端设计源码整合的RunFlow桌面端效率工具,总文件数29个,包括17个Java源文件、2个属性文件、1个Git忽略文件、1个JAR包文件、1个LICENSE文件、1个Markdown文件、1个YAML文件、1个Maven配置文件和1个命令文件。该工具旨在提升工作效率,适用于各种桌面环境下的便捷使用。
那些年,与你同分同位次的同学都去了哪里?全国各大学在辽宁2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
Golang支付-微信公众号、微信应用、微信小程序、微信企业支付、支付宝网络版、支付宝应用、支付宝企业支付_支付宝
医疗辅助诊断系统-开题
该项目为东东购物网的后台开发源码,采用JavaScript为主要编程语言,辅以CSS、Java、HTML等多种语言,共包含1300个文件。具体文件类型分布如下:458个PNG图片文件、215个JavaScript文件、160个JPG图片文件、159个GIF图片文件、107个CSS样式表文件、96个Java源代码文件、28个HTML文件、24个XML文件、12个JSON文件、8个Map文件。该系统旨在提供高效、便捷的购物后台管理功能。
content_1728052071778.apk
资源视频编辑软件win781064位系统
职业心理测试人格气质情绪控制测试18个文件
那些年,与你同分同位次的同学都去了哪里?全国各大学在辽宁2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
该项目为基于Python语言的微信小程序源码,全面整合了JavaScript和微信小程序开发技术。项目结构包含50个文件,涵盖了15个PNG图片、9个JSON配置、8个JavaScript脚本、7个wxss样式表、6个WXML模板和4个JPG图片。此外,还包括1个Markdown文档。该小程序的设计与实现展现了Python编程的强大能力,适用于微信生态下的各类应用场景。
全国大学生电子设计大赛项目合集全国电赛优秀作品电赛B题风力摆控制系统设计(原理图+源代码+设计报告等)
基于西门子S7-200PLC的自动灌溉系统组态王组态 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
该项目是基于GitHub平台的xClouds-device项目设计源码,包含2835个文件,包括763个头文件、630个C语言源文件、207个文本文件、144个Makefile文件、102个Python脚本、86个Markdown文件、70个二进制文件、59个实验文件、50个Shell脚本、48个项目构建脚本。该项目主要使用C语言编写,辅以Python、Shell、C++和C++等语言,适合进行设备控制和云平台交互开发。