SpringMVC 视图解析器 方法返回值 异常处理器

简介: SpringMVC 视图解析器 方法返回值 异常处理器

异常处理器


什么是异常处理器


在Spring MVC中,提供了一个全局异常处理器,用于对系统中出现的异常进行统一的处理。在一般的系统中,DAO,Service及Controller层都出现的异常都以“throws Exception”的形式向上层抛出,最后都会由Spring MVC的前端控制器DispatcherServlet统一由全局异常处理器进行异常处理。


对于预期的异常,通常要定义一个自定义异常类,该类用于在发生异常后,存储异常信息,最终交给全局异常处理器处理该异常。

异常处理器执行流程


实现方式


SpringMVC提供了异常处理器多种方式

方式一:实现HandlerExceptionResolver

方式二:通知类

       使用@ControllerAdvice对Controller增强


       使用@ExceptionHandler捕获异常


       基本功能


需求  

   

访问 /demo04/item.action?id=1


id =1 系统异常


id =2 自定义异常


id =3 正常


步骤


编写自定义异常

编写Controller 接受一个参数 (系统异常 自定义异常 正常)

编写访问连接

 

实现


  1. 编写自定义异常 继承RuntimeException 重写构造
public class CustomExcption extends RuntimeException {
    public CustomExcption() {
    }
    public CustomExcption(String message) {
        super(message);
    }
    public CustomExcption(String message, Throwable cause) {
        super(message, cause);
    }
    public CustomExcption(Throwable cause) {
        super(cause);
    }
    public CustomExcption(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

2.编写Controller 接受参数


@Controller
@RequestMapping("/demo04")
public class Demo04ItemController {
    @RequestMapping("/item")
    public String item(Integer id ) {
        if(id == 1) {
            // 系统异常
            int i = 1 / 0;
        } else if( id == 2 ) {
            // 自定义
            throw new CustomExcption("自定义异常信息");
        }
        //正常
        return "forward:/index.jsp";
    }
}

3.编写访问连接


<a href="${pageContext.request.contextPath}/demo04/item.action?id=1">异常处理 id =1 系统异常</a> <br/>
<a href="${pageContext.request.contextPath}/demo04/item.action?id=2">异常处理 id =2 自定义异常 </a> <br/>
<a href="${pageContext.request.contextPath}/demo04/item.action?id=3">异常处理正常</a> <br/>


方式一:实现接口


编写HandlerExceptionResolver接口的实现类CustomExceptionResolver

实现方法resolverException()

并根据参数Exception e对异常进行处理:自定义异常 系统异常

@Component
public class CustomExceptionResolver  implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        // 1 统一异常
        CustomExcption customExcption = null;
        if(e instanceof CustomExcption) {
            customExcption = (CustomExcption) e;
        } else {
            customExcption = new CustomExcption("系统繁忙,请稍后重试!");
        }
        // 2 错误信息返回
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message" ,customExcption.getMessage());
        modelAndView.setViewName("forward:/error.jsp");
        return modelAndView;
    }
}


方式二:通知类


编写GlobalExceptionResolver类 用于处理所有异常

在类上添加@Controller的增强器@ControllerAdvice

在对应的方法上添加@ExceptionHandler来捕获异常

@ControllerAdvice
public class GlobalExceptionResolver {
    /**
     * 自定义异常处理器
     * @param ec
     * @param model
     * @return
     */
    @ExceptionHandler(CustomExcption.class)
    public String custom(CustomExcption ec, Model model) {
        model.addAttribute("message", ec.getMessage() + "Global");
        return "forward:/error.jsp";
    }
    /**
     * 其他异常处理器
     * @param e
     * @param model
     * @return
     */
    @ExceptionHandler(Exception.class)
    public String other(Exception e, Model model) {
        model.addAttribute("message", "系统繁忙,请稍后重试!" + "Global");
        return "forward:/error.jsp";
    }
}

异常信息展示页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>友好页面</title>
</head>
<body>
    ${message}
</body>
</html>


总结


视图解析器:


       可以帮助我们快速修改视图路径 不用一个一个Controller去修改


方法返回值:


       方法返回值默认是ModelAndView Model默认是request作用域 绕过视图解析器 使用请求转发          或者重定向


异常处理器:


       更加友好的提示异常




image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

相关文章
|
8月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
1891 1
|
10月前
|
监控 安全 网络安全
深入解析PDCERF:网络安全应急响应的六阶段方法
PDCERF是网络安全应急响应的六阶段方法,涵盖准备、检测、抑制、根除、恢复和跟进。本文详细解析各阶段目标与操作步骤,并附图例,助读者理解与应用,提升组织应对安全事件的能力。
1318 89
|
9月前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
557 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
8月前
|
JSON 监控 网络协议
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
|
8月前
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
223 1
|
8月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
304 5
|
10月前
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
276 18
|
9月前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
387 1
|
10月前
|
人工智能 监控 数据可视化
提升开发效率:看板方法的全面解析
随着软件开发复杂度提升,并行开发模式下面临资源分配不均、信息传递延迟及缺乏全局视图等瓶颈问题。看板工具通过任务状态实时可视化、流量效率监控和任务依赖管理,帮助团队直观展示和解决这些瓶颈。未来,结合AI预测和自动化优化,看板工具将更高效地支持并行开发,成为驱动协作与创新的核心支柱。
|
8月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
726 29

推荐镜像

更多
  • DNS
  • 下一篇
    开通oss服务