`
aqiulian
  • 浏览: 304 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SpringMVC对迪士尼CP源码三种异常处理方式

阅读更多
在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Page 好的多。 SpringMVC 提供了三种异常处理方式, 良好的运用它们可以给用户提供可读的错误信息【阿酋联源码论坛:aqiulian.com】迪士尼cp源码Q_212303635。
    实现 HandlerExceptionResolver
    public class AppHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    ModelAndView mav = new ModelAndView();
    mav.addObject(“message”, ex.getMessage());
    // 可以设置视图名导向错误页面
    mav.setViewName("/error");
    // 直接返回视图
    // 如果返回 null,则会调用下一个 HandlerExceptionResolver
    return mav;
    }
    }
    然后配置一个 HandlerExceptionResolver
    @Beanpublic AppHandlerExceptionResolver appHandlerExceptionResolver() {
    return new AppHandlerExceptionResolver();
    }
    HandlerExceptionResolver 的实现类会 catch 到 @Controller 方法执行时发生的异常,处理后返回 ModelAndView 作为结果视图,因此可以通过它来定制异常视图。
    HandlerExceptionResolver 只能捕获 @Controller 层发生的异常(包括 @Controller 调用 @Service 发生的异常),其他地方的异常,比如访问了一个不存在的路径,不会被 HandlerExceptionResolver 捕获,此时会跳到 ErrorController 处理, 下面会说到。

    通过 @ControllerAdvice 和 @ExceptionHandler 注解
    // 可以配置拦截指定的类或者包等// @RestControllerAdvice 使 @ExceptionHandler 注解的方法默认具有 @ResponseBody 注解@RestControllerAdvice(basePackageClasses = HelloWorldController.class)public class AppExceptionHandlerAdvice {

    // 配置拦截的错误类型
    // 这里也可以返回 ModelAndView 导向错误视图
    @ExceptionHandler(Exception.class)
    public ResponseEntity responseEntity(Exception e) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    Map<String, Object> map = new HashMap<>();
    map.put(“status”, 400);
    map.put(“message”, e.getMessage());
    // 直接返回结果
    return new ResponseEntity<>(map, headers, HttpStatus.BAD_REQUEST);

    }
    }
    这种方式配置的异常处理由 HandlerExceptionResolver 的默认实现类 HandlerExceptionResolverComposite 处理,因此也只能捕获 @Controller 层的异常。
    @ExceptionHandler 可以返回 ModelAndView 定制异常视图。
    @ControllerAdvice 可以拦截特定的类,@ExceptionHandler 可以拦截特定的异常,因此可以更精确的配置异常处理逻辑。
    @ExceptionHandler 可以在 @Controller 类中声明,此时只能处理同一个类的异常

    自定义 ErrorController bean
    @RestController@RequestMapping("/error")public class AppErrorController extends AbstractErrorController {

    public AppErrorController(ErrorAttributes errorAttributes) {
    super(errorAttributes);
    }

    @RequestMapping
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
    Map<String, Object> body = getErrorAttributes(request, false);
    HttpStatus status = getStatus(request);
    // 返回响应体
    return new ResponseEntity<>(body, status);
    }

    @Override
    public String getErrorPath() {
    return “/error”;
    }
    }
    如果没有配置 ErrorController, SpringBoot 会通过 ErrorMvcAutoConfiguration 自动配置一个,默认的实现类为 BasicErrorController。
    ErrorController 可以处理非 @Controller 层抛出的异常,例如常见的访问了一个不存在的路径。
    ErrorController 可以进行统一的错误处理,即让 HandlerExceptionResolver 返回的 ModelAndView 导向错误页面
分享到:
评论

相关推荐

    springMvc源码分析

    springMvc源码分析springMvc源码分析springMvc源码分析springMvc源码分析springMvc源码分析springMvc源码分析

    springmvc带进度条上传源码

    - 对文件名进行安全处理,避免路径遍历等安全问题。 8. **最佳实践**: - 使用异步上传以改善用户体验,特别是在上传大文件时。 - 实现错误处理和重试机制,提高上传的成功率。 通过上述步骤,我们可以创建一个...

    jetbrick-springmvc jar包(包含源码)

    5. **异常处理**:提供了一套统一的异常处理机制,将系统异常转化为用户友好的错误页面,便于进行异常管理和用户体验优化。 6. **国际化**:内置了便捷的国际化支持,可以轻松实现多语言环境下的应用开发。 7. **...

    springmvc源码

    - 小项目源码:可以直接运行和调试,加深对实际开发流程的理解。 - 整合 Hibernate:理解如何在 Spring MVC 中配置和使用 Hibernate,实现数据访问。 在学习过程中,你可以逐步理解 Spring MVC 的组件和工作原理...

    spring源码、springMVC源码、springboot源码资料,轻松应对金三银四Java面试 99% Spring面试题

    本文将深入探讨Spring、SpringMVC和SpringBoot的源码,帮助你理解和掌握这三大框架的关键知识点,从而在金三银四的Java面试中脱颖而出。 首先,让我们从Spring框架开始。Spring的核心是依赖注入(Dependency ...

    springMVC+ibatis的源码

    SpringMVC作为Spring框架的一部分,主要用于构建Web应用程序的Model-View-Controller(MVC)架构,而iBatis则是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了灵活的数据库操作方式。 SpringMVC的核心...

    Spring+SpringMVC+Mybatis框架整合源码

    标题中的“Spring+SpringMVC+Mybatis框架整合源码”指的是一个基于Java的Web开发项目,它结合了三个主流的开源框架:Spring、SpringMVC和Mybatis,以实现高效且灵活的企业级应用开发。这三种框架在Java世界中扮演着...

    springMVC学习版源码

    通过"SpringMVC学习版源码",初学者可以详细查看这些组件的实现,理解它们如何协同工作,从而加深对SpringMVC的理解。MySpringMVC可能是该项目的主模块,包含了整个SpringMVC应用的配置、控制器、模型、视图等组件。...

    SpringMVC简单源码实现

    SpringMVC提供了一种优雅的方式来处理应用中的异常。通过`@ExceptionHandler`注解,可以在控制器中定义特定异常的处理方法。此外,全局异常处理器(`@ControllerAdvice`)可以捕获所有控制器的异常,实现统一的错误...

    1、手写springmvc框架及分析springmvc源码.zip

    1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析springmvc源码.zip1、手写springmvc框架及分析...

    SpringMVC demo 完整源码实例下载

    在这个"SpringMVC demo 完整源码实例下载"中,我们能够深入理解并学习SpringMVC的核心概念和实际应用。 首先,SpringMVC是Spring框架的一部分,它通过Model-View-Controller(MVC)设计模式来分离应用程序的业务...

    springmvc 异常处理示例

    springmvc异常处理的博文如下: http://blog.csdn.net/dlf123321/article/details/50756003

    SpringMVC3.1实例源码

    SpringMVC提供了全局异常处理机制,通过@ControllerAdvice和@ExceptionHandler注解,可以集中处理所有控制器中的异常。 7. **数据绑定与验证** SpringMVC支持模型对象的数据绑定和验证,例如,使用@...

    spring及springmvc源码

    异常处理器(HandlerExceptionResolver)能够捕获和处理控制器抛出的异常,提供统一的错误页面。 在源码学习过程中,你可能会遇到以下关键类和接口:`RequestMappingHandlerMapping`, `...

    springmvc框架源码.zip

    9. **异常处理**:SpringMVC提供了一套优雅的异常处理机制,允许开发者定义全局和特定异常的处理策略。 10. **参数绑定**:自动将请求参数绑定到控制器方法的参数上,支持基本类型、复杂类型以及自定义类型转换器。...

    SpringMVC demo 完整源码实例下载.zip

    异常处理在Web应用中至关重要,SpringMVC允许我们定义全局和局部异常处理器。GlobalExceptionResolver或@ControllerAdvice注解可以捕获并处理特定类型的异常,提供友好的错误页面或JSON响应。 拦截器是SpringMVC中...

    Maven搭建SpringMVC+Hibernate项目源码

    Maven搭建SpringMVC+Hibernate项目源码,包括Hibernate二级缓存Ehcache的搭建等等,博文地址:http://blog.csdn.net/fengshizty/article/details/43635305

    springmvc返回json的全局异常统一处理demo

    springmvc返回json的全局异常统一处理demo,有问题可以留言。

    SpringMvc学习系列整合源码

    在这个"SpringMvc学习系列整合源码"中,你将有机会深入理解SSM(Spring、SpringMVC、MyBatis)框架的集成和工作原理。 首先,Spring作为基础框架,负责管理应用的组件,包括依赖注入(DI)和面向切面编程(AOP)。...

    springMVC 注册登录源码

    SpringMVC是Spring框架的一部分,它提供了一种模型-视图-控制器(MVC)架构来构建Web应用程序。我们将主要关注以下几个核心知识点: 1. **SpringMVC 概述** SpringMVC是一个轻量级的Web开发框架,它简化了处理HTTP...

Global site tag (gtag.js) - Google Analytics