`
raymond.chen
  • 浏览: 1433496 次
  • 性别: 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定义统一返回格式及全局异常处理。

    全局异常

    全局异常处理是软件开发中的一个重要概念,特别是在Java、Python、C#等面向对象的语言中,它为程序提供了统一的错误捕获和处理机制。全局异常处理可以确保在程序的任何地方发生异常时,都能得到适当的处理,避免程序...

    全局异常类和统一返回结果代码压缩包

    在Java编程中,全局异常处理和统一返回结果是构建健壮、可维护的Web应用程序的重要组成部分。这个压缩包文件“全局异常类和统一返回结果代码”显然是一个个人实践项目,旨在帮助初学者或开发者理解如何在IDEA环境下...

    Spring Boot处理全局统一异常的两种方法与区别

    Spring Boot在处理全局统一异常时提供了两种主要的方法,分别是使用`@ControllerAdvice`和`@ExceptionHandler`注解,以及利用`ErrorController`接口。这两种方式都能有效地捕获和处理应用程序中的异常,提供友好的...

    Spring Boot中使用AOP统一处理web层异常的方法

    "Spring Boot中使用AOP统一处理web层异常的方法" 本文主要介绍了在Spring Boot中使用AOP(Aspect-Oriented Programming,面向方面编程)来统一处理web层异常的方法。该方法可以使得系统在出现异常时能够正确地处理...

    Maven+SpringMVC实现统一异常处理

    统一异常处理就是将所有可能抛出的异常集中处理,提供一个全局的、一致的错误反馈,提高用户体验并简化代码结构。 1. **Maven配置** Maven的pom.xml文件是项目的核心,它定义了项目的依赖关系。为了使用SpringMVC...

    spring+jpa+全局异常+单元测试

    全局异常处理是任何应用都应该具备的重要特性,它可以统一捕获和处理程序中可能出现的异常,避免因未处理的异常导致系统崩溃。在Spring框架中,我们可以通过创建一个@ControllerAdvice注解的类来实现全局异常处理。...

    yii2 开发api接口时优雅的处理全局异常的方法

    当遇到异常情况时,开发者通常会抛出异常,并通过全局异常处理器进行统一处理。 Yii2框架中的全局异常处理是通过components配置中的errorHandler组件实现的。开发者可以自定义异常处理器,通过修改配置文件中的...

    Spring MVC之Controller层的常用注解

    当Controller方法抛出异常时,标注了`@ExceptionHandler`的方法会被调用,可以统一处理错误并返回合适的响应。 10. `@InitBinder`:允许在请求处理之前对数据绑定进行自定义配置,如设置日期格式、排除某些字段等。...

    Spring Validator接口校验与全局异常处理器

    此外,全局异常处理器是 Spring 框架中的一种异常处理机制,它允许开发者在应用程序中统一处理异常。全局异常处理器可以捕捉到应用程序中的所有异常,并将其处理成统一的错误信息。这样可以使得应用程序更加robust和...

    Controller对请求封装和返回

    // 处理全局异常,返回统一的错误信息 } protected &lt;T&gt; ResponseEntity&lt;T&gt; buildSuccessResponse(T data) { // 构建成功的响应对象 } } ``` 然后我们的Controller可以这样设计: ```java @RestController ...

    异常处理及日志记录

    - **全局异常处理**: 通过创建一个全局异常过滤器,可以确保所有未被捕获的异常都能得到妥善处理。这可以通过实现`IExceptionFilter`接口或继承`ExceptionFilterAttribute`类来实现。过滤器会在每个控制器或操作...

    pring异常处理共5页.pdf.zip

    8. 最佳实践:分享在实际开发中处理异常的一些最佳实践,包括避免在Controller层抛出检查异常、正确使用异常层次结构等。 通过对这些内容的深入理解,开发者可以更好地应对Spring应用中的异常情况,提高系统的健壮...

    完整版 Java开发实训课程系列-SpringMVC框架技术教程 第6章 异常处理 (共12页).pptx

    SpringMVC提供了全局异常处理器(`HandlerExceptionResolver`)来统一处理所有异常,这样可以在不重复代码的情况下,实现对不同类型的异常进行统一管理。 ### 自定义异常 1. **自定义异常类**:为了更精确地表示...

    Struts1异常处理

    1. **全局异常处理**:Struts1允许开发者在struts-config.xml配置文件中定义全局的异常处理。通过`&lt;global-exceptions&gt;`标签,可以指定当特定的异常类型发生时,应转向哪个JSP页面或者Action来处理。例如,你可以...

    Struts 声明式异常处理和个性化异常处理

    自定义异常类可以继承Java的`Exception`类或者其子类,以便在全局异常映射中进行处理。 例如,创建一个名为`MyCustomException`的异常类: ```java public class MyCustomException extends RuntimeException { ...

    Spring Boot统一异常处理详解

    本文将深入探讨如何在Spring Boot中进行全局异常处理。 首先,Spring Boot默认提供了一个“error”映射,但其提供的错误页面并不适合直接展示给用户。为了自定义更加友好的错误页面,我们可以利用`@...

Global site tag (gtag.js) - Google Analytics