使用@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定义统一返回格式及全局异常处理。
全局异常处理是软件开发中的一个重要概念,特别是在Java、Python、C#等面向对象的语言中,它为程序提供了统一的错误捕获和处理机制。全局异常处理可以确保在程序的任何地方发生异常时,都能得到适当的处理,避免程序...
在Java编程中,全局异常处理和统一返回结果是构建健壮、可维护的Web应用程序的重要组成部分。这个压缩包文件“全局异常类和统一返回结果代码”显然是一个个人实践项目,旨在帮助初学者或开发者理解如何在IDEA环境下...
Spring Boot在处理全局统一异常时提供了两种主要的方法,分别是使用`@ControllerAdvice`和`@ExceptionHandler`注解,以及利用`ErrorController`接口。这两种方式都能有效地捕获和处理应用程序中的异常,提供友好的...
"Spring Boot中使用AOP统一处理web层异常的方法" 本文主要介绍了在Spring Boot中使用AOP(Aspect-Oriented Programming,面向方面编程)来统一处理web层异常的方法。该方法可以使得系统在出现异常时能够正确地处理...
统一异常处理就是将所有可能抛出的异常集中处理,提供一个全局的、一致的错误反馈,提高用户体验并简化代码结构。 1. **Maven配置** Maven的pom.xml文件是项目的核心,它定义了项目的依赖关系。为了使用SpringMVC...
全局异常处理是任何应用都应该具备的重要特性,它可以统一捕获和处理程序中可能出现的异常,避免因未处理的异常导致系统崩溃。在Spring框架中,我们可以通过创建一个@ControllerAdvice注解的类来实现全局异常处理。...
当遇到异常情况时,开发者通常会抛出异常,并通过全局异常处理器进行统一处理。 Yii2框架中的全局异常处理是通过components配置中的errorHandler组件实现的。开发者可以自定义异常处理器,通过修改配置文件中的...
当Controller方法抛出异常时,标注了`@ExceptionHandler`的方法会被调用,可以统一处理错误并返回合适的响应。 10. `@InitBinder`:允许在请求处理之前对数据绑定进行自定义配置,如设置日期格式、排除某些字段等。...
此外,全局异常处理器是 Spring 框架中的一种异常处理机制,它允许开发者在应用程序中统一处理异常。全局异常处理器可以捕捉到应用程序中的所有异常,并将其处理成统一的错误信息。这样可以使得应用程序更加robust和...
// 处理全局异常,返回统一的错误信息 } protected <T> ResponseEntity<T> buildSuccessResponse(T data) { // 构建成功的响应对象 } } ``` 然后我们的Controller可以这样设计: ```java @RestController ...
- **全局异常处理**: 通过创建一个全局异常过滤器,可以确保所有未被捕获的异常都能得到妥善处理。这可以通过实现`IExceptionFilter`接口或继承`ExceptionFilterAttribute`类来实现。过滤器会在每个控制器或操作...
8. 最佳实践:分享在实际开发中处理异常的一些最佳实践,包括避免在Controller层抛出检查异常、正确使用异常层次结构等。 通过对这些内容的深入理解,开发者可以更好地应对Spring应用中的异常情况,提高系统的健壮...
SpringMVC提供了全局异常处理器(`HandlerExceptionResolver`)来统一处理所有异常,这样可以在不重复代码的情况下,实现对不同类型的异常进行统一管理。 ### 自定义异常 1. **自定义异常类**:为了更精确地表示...
1. **全局异常处理**:Struts1允许开发者在struts-config.xml配置文件中定义全局的异常处理。通过`<global-exceptions>`标签,可以指定当特定的异常类型发生时,应转向哪个JSP页面或者Action来处理。例如,你可以...
自定义异常类可以继承Java的`Exception`类或者其子类,以便在全局异常映射中进行处理。 例如,创建一个名为`MyCustomException`的异常类: ```java public class MyCustomException extends RuntimeException { ...
本文将深入探讨如何在Spring Boot中进行全局异常处理。 首先,Spring Boot默认提供了一个“error”映射,但其提供的错误页面并不适合直接展示给用户。为了自定义更加友好的错误页面,我们可以利用`@...