`
raymond.chen
  • 浏览: 1419723 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Controller层的全局异常统一处理

 
阅读更多

使用@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>

 

分享到:
评论

相关推荐

    spingmvc+mybatis+统一异常处理机制

    唯一不同的加入了统一错误处理,为了方便开发人员开发,所有错误码用一张表存在数据库中,然后由应用将整表缓存,缓存采用的spring自带的cache,开发中所有错误包括系统异常在Controller直接抛出即可。之所以缓存...

    springboot定义统一返回格式及全局异常处理

    springboot定义统一返回格式及全局异常处理。springboot定义统一返回格式及全局异常处理。

    基于SpringBoot 的图书管理系统

    基于SpringBoot 的图书管理系统,主要包括系统管理、图书管理、借阅者管理三部分 项目结构的一些简单说明...│ │ │ ├─exception 全局统一异常处理 │ │ │ ├─interceptor 过滤接口 等等可以看主要文章有具体展示

    springCloud.rar(私聊博主要密码)

    + mybatis-plus + 令牌token + 全局异常管理 + 统一返回数据拦截 + 自定义异常 + 处理ajax跨域请求 + Feign + 熔断机制 + eureka + 单元测试(controller、service、mapper层) + redis集群集成练习 + redis操作练习 ...

    ABP生成的初始框架

    1.2.11 统一异常处理,应用层不需要自己写异常处理代码 1.2.12 提供针对Application层方法的参数有效性认证 1.2.13 通过Application Service创建Web API层,无需编写ApiController 1.2.14 提供基类帮助用户实现...

    基于SpringBoot编写的RESTFul API,使用HTTP状态码与JSON作为响应规范+源代码+文档说明

    采用@RestControllerAdvice + @ExceptionHandler的方式对全局异常进行处理,同时加入了常见的一些自定义异常类。 ## 参数验证器 采用spring提供的@Validated注解结合hibernate的validator进行验证,你只需要在你的...

    ABP(2.02)框架相关Demo代码以及报错处理和中文说明手册

    统一的异常处理(应用层几乎不需要处理自己写异常处理代码) 数据有效性验证(Asp.NET MVC只能做到Action方法的参数验证,ABP实现了Application层方法的参数有效性验证) 通过Application Services自动创建Web Api层...

    wsdl2java源码-springboot-learn:springboot-学习

    全局统一的异常处理 - [disconf配置集成](#disconf配置集成) - [基于redis的分布式锁(控制定时任务的并发)](#基于redis的分布式锁) - [camel协议转换包](#camel协议转换包) - [数据库domain工具包](#domain工具包) -...

    一个SpringBoot基础项目框架

    全局异常处理 接口统一结果返回 一键生成数据库设计文档 大批量数据插入数据库测试 根据word模板导出word文件或者转成PDF导出 根据freemarker模板文件生成word文档 word文档转pdf文档 其他各分支代码功能说明如下: ...

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂sql采用Mapper.xml配置 使用了layui的弹出层、菜单、文件上传、富...

    代码生成器-可自定义模版-guns

    系统地讲解了如何构建一个日常生产环境...10. 页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码

    java微信公众号MVC开发框架

    提供统一的异常处理机制 提供access_token自动更新机制 请求消息组装 灵活的响应消息类型 二、快速入门 本章教材提供一个最简单的例子,用户在微信公众号发一条foo的文本请求消息,公众号响应一条bar的文本响应消息...

    Guns后台管理系统-其他

    9、页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码。 10、在线系统参数配置,灵活控制常用...

    Struts in Action中文版

    2.3.4. 黑盒-白盒统一体.................................................................................................45 2.4. Struts, Model 2,以及 MVC...................................................

    struts in Action

    2.3.4. 黑盒-白盒统一体.................................................................................................45 2.4. Struts, Model 2,以及 MVC....................................................

Global site tag (gtag.js) - Google Analytics