首页 > 其他分享 >SpringMVC异常处理

SpringMVC异常处理

时间:2023-11-19 23:55:07浏览次数:38  
标签:web SpringMVC servlet springframework 处理 SysException org import 异常

自定义异常类

SysException.java

package com.zjw.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

/**
 * 自定义异常类
 */
@Getter
@Setter
@AllArgsConstructor
public class SysException extends Exception {

    /**
     * 存储提示信息
     */
    private String message ;

}

异常处理器

实现HandlerExceptionResolver接口。

SysExceptionResolver.java

package com.zjw.exception;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 异常处理器
 */
public class SysExceptionResolver implements HandlerExceptionResolver {

    /**
     * 处理异常业务逻辑
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        //获取到异常对象
        SysException e = null;
        if (ex instanceof SysException){
            e = (SysException) ex;
        }else {
            e = new SysException("系统正在维护中");
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg",e.getMessage());
        mv.setViewName("error");
        return mv;
    }
}

Controller

package com.zjw.controller;

import com.zjw.exception.SysException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/testException")
    public String testException() throws SysException {
        System.out.println("testException方法执行了。。。。");
        try {
            int a = 1/0 ;
        } catch (Exception e) {
            e.printStackTrace();
            throw new SysException("查询所有用户出现错误了。。。");
        }
        return "success";
    }
}

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启注解扫描-->
    <context:component-scan base-package="com.zjw"/>

    <!--配置视图解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--前端控制器,哪些静态资源不拦截-->
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/images/" mapping="/images/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>

    <!--配置异常处理器-->
    <bean id="sysExceptionResolver" class="com.zjw.exception.SysExceptionResolver"/>

    <!--开启SpringMVC框架注解的支持-->
    <mvc:annotation-driven/>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
  <display-name>Archetype Created Web Application</display-name>

  <!--配置过滤器-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!--配置前端控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>error</title>
</head>
<body>
    ${errorMsg}
</body>
</html>

标签:web,SpringMVC,servlet,springframework,处理,SysException,org,import,异常
From: https://www.cnblogs.com/zjw-blog/p/17843002.html

相关文章

  • Netty源码学习4——服务端是处理新连接的&netty的reactor模式
    系列文章目录和关于我零丶引入在前面的源码学习中,梳理了服务端的启动,以及NioEventLoop事件循环的工作流程,并了解了Netty处理网络io重要的Channel,ChannelHandler,ChannelPipeline。这一篇将学习服务端是如何构建新的连接。一丶网络包接收流程当客户端发送的网络数据帧通过网......
  • SpringMVC返回值
    字符串/***测试返回字符串*@parammodelmodel*@return返回的字符串,通过视图解析器调整到jsp页面*/@RequestMapping("/testString")publicStringtestString(Modelmodel){System.out.println("testString方法执行了。。。"......
  • 14、SpringMVC之注解配置
    14.1、概述在实际工作中,一般使用配置类和注解代替web.xml和SpringMVC配置文件的功能;在Servlet3.0环境中,容器会在类路径中查找实现了javax.servlet.ServletContainerInitializer接口的类,如果找到了的话,就会用它来配置Servlet容器;Spring提供了ServletContainerIni......
  • 掌握迭代器:Python中的强大工具,让你轻松驾驭数据处理的巨轮
    今天,我们将深入探讨Python中的迭代器。迭代器是一种强大的工具,它使我们能够在不需要知道数据集的全部信息的情况下,逐个访问数据集中的每个元素。通过使用迭代器,我们可以逐个处理数据集中的每个元素,而不需要一次性加载整个数据集到内存中。这使得迭代器在处理大型数据集时特别有用。......
  • django中间件处理返回数据
    django中间件处理返回数据统一接口返回数据格式的时候,每个视图都需要返回JsonResponse对象,比较麻烦,因此增加中间件处理视图返回的结果。fromdjango.http.responseimportJsonResponse,HttpResponseBasecode_msg_map={0:'ok',1:'Theargsmissing.',1000......
  • signal - 注册信号处理函数
    Unix系统提供了signal和sigaction两种改变信号处理函数的方法。signal是设置信号处理函数的原始API,比sigaction简单且功能少。signal()无法在不改变信号处理函数的同时,还能获得当前的信号处理函数,但sigaction()可以signal在UNIX实现间存在差异,对可移植性有要求的程序不能使......
  • 【6.0】Python中级之异常处理
    【一】什么是异常异常是程序运行时可能发生的错误或意外情况。在Python中,异常是一种对象,表示程序执行期间发生的错误。当出现异常时,程序的正常流程会被中断,而是跳转到异常处理流程。【二】异常分类在Python中,异常分为两类:内建异常(Built-inExceptions):由Python内部定义......
  • 05.请求与响应 处理响应信息
    请求与响应-处理响应信息针对于后端服务,需要针对请求返回对应的响应信息。响应信息可以响应很多类型的信息类型。常见的比如文本类型,还有非常通用的JSON数据。在Flask中,可以使用视图函数来处理接口请求并生成相应的响应。而且Flask提供了多种方式来构建和返回接口响应......
  • python之numpy处理股票数据
    一概述Numpy是一个最重要的一个基于多维数组对象,即ndarray对象,该对象具有矢量算数运算能力和复杂的广播能力,可以执行一些科学计算。它的常用属性如下表所示:属性说明ndim数组的维度,如一维、二维、三维等shape数组的形状,如一个5行4列的数组,它的shape属性为(5,4)size数组元素的总个数......
  • C# 使用执行cmd命令遇到俄语乱码处理
     设置执行cmd命令的ProcessStartInfo对象编码使用System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);注册更多字符编码。通过上面的方式,如果把语言项的Beta版:使用UnicodeUTF-8提供全球语言支持的选择去掉则正常。但是该功能用于修复日志输出还有......