使用@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>
相关推荐
唯一不同的加入了统一错误处理,为了方便开发人员开发,所有错误码用一张表存在数据库中,然后由应用将整表缓存,缓存采用的spring自带的cache,开发中所有错误包括系统异常在Controller直接抛出即可。之所以缓存...
springboot定义统一返回格式及全局异常处理。springboot定义统一返回格式及全局异常处理。
基于SpringBoot 的图书管理系统,主要包括系统管理、图书管理、借阅者管理三部分 项目结构的一些简单说明...│ │ │ ├─exception 全局统一异常处理 │ │ │ ├─interceptor 过滤接口 等等可以看主要文章有具体展示
+ mybatis-plus + 令牌token + 全局异常管理 + 统一返回数据拦截 + 自定义异常 + 处理ajax跨域请求 + Feign + 熔断机制 + eureka + 单元测试(controller、service、mapper层) + redis集群集成练习 + redis操作练习 ...
1.2.11 统一异常处理,应用层不需要自己写异常处理代码 1.2.12 提供针对Application层方法的参数有效性认证 1.2.13 通过Application Service创建Web API层,无需编写ApiController 1.2.14 提供基类帮助用户实现...
采用@RestControllerAdvice + @ExceptionHandler的方式对全局异常进行处理,同时加入了常见的一些自定义异常类。 ## 参数验证器 采用spring提供的@Validated注解结合hibernate的validator进行验证,你只需要在你的...
统一的异常处理(应用层几乎不需要处理自己写异常处理代码) 数据有效性验证(Asp.NET MVC只能做到Action方法的参数验证,ABP实现了Application层方法的参数有效性验证) 通过Application Services自动创建Web Api层...
全局统一的异常处理 - [disconf配置集成](#disconf配置集成) - [基于redis的分布式锁(控制定时任务的并发)](#基于redis的分布式锁) - [camel协议转换包](#camel协议转换包) - [数据库domain工具包](#domain工具包) -...
全局异常处理 接口统一结果返回 一键生成数据库设计文档 大批量数据插入数据库测试 根据word模板导出word文件或者转成PDF导出 根据freemarker模板文件生成word文档 word文档转pdf文档 其他各分支代码功能说明如下: ...
对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂sql采用Mapper.xml配置 使用了layui的弹出层、菜单、文件上传、富...
系统地讲解了如何构建一个日常生产环境...10. 页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码
提供统一的异常处理机制 提供access_token自动更新机制 请求消息组装 灵活的响应消息类型 二、快速入门 本章教材提供一个最简单的例子,用户在微信公众号发一条foo的文本请求消息,公众号响应一条bar的文本响应消息...
9、页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码。 10、在线系统参数配置,灵活控制常用...
2.3.4. 黑盒-白盒统一体.................................................................................................45 2.4. Struts, Model 2,以及 MVC...................................................
2.3.4. 黑盒-白盒统一体.................................................................................................45 2.4. Struts, Model 2,以及 MVC....................................................