Spring MVC全局异常处理和单元测试_动力节点Java学院整理

Spring MVC是一种流行的Java Web框架,其拥有全局异常处理机制,可以在程序抛出异常后,统一处理并返回指定的错误信息。本篇攻略主要包含两部分内容,分别是Spring MVC全局异常处理和单元测试。

一、Spring MVC全局异常处理

1.1 在Spring配置文件中配置异常处理拦截器

在Spring的配置文件中,可以配置一个全局的异常处理拦截器,用来捕获应用程序中抛出的异常。该拦截器需要实现HandlerExceptionResolver接口,并在配置文件中进行配置。

<bean class="com.example.ExceptionHandler"/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </list>
    </property>
</bean>

1.2 定义异常处理类

定义一个异常处理类,实现HandlerExceptionResolver接口,并实现resolveException方法,该方法中可以对不同异常进行分类处理。

@Component
public class ExceptionHandler implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
        if (ex instanceof BusinessException) {
            modelAndView.addObject("errorMsg", ex.getMessage());
            modelAndView.setViewName("error/business_error");
        } else if (ex instanceof AuthorityException) {
            modelAndView.addObject("errorMsg", ex.getMessage());
            modelAndView.setViewName("error/authority_error");
        } else {
            modelAndView.addObject("errorMsg", "系统内部错误,请稍后再试!");
            modelAndView.setViewName("error/system_error");
        }
        return modelAndView;
    }
}

1.3 自定义异常类

自定义异常类可以用来分类处理不同类型的异常。例如,BusinessException用来处理业务异常,AuthorityException用来处理权限异常。

public class BusinessException extends RuntimeException {

    public BusinessException(String message) {
        super(message);
    }
}

public class AuthorityException extends RuntimeException {

    public AuthorityException(String message) {
        super(message);
    }
}

1.4 抛出异常

在应用程序中,可以通过抛出自定义异常的方式让全局异常处理器捕获并处理异常。

public void delete(Long id) {
    if (id == null || id <= 0L) {
        throw new BusinessException("ID不合法!");
    }
    if (repository.delete(id) == 0) {
        throw new BusinessException("删除失败,数据可能已不存在!");
    }
}

1.5 配置视图解析器

在Spring MVC的配置文件中,配置视图解析器,用于解析视图名称,并将其转换为真正的视图对象。在本例中,使用了JSP视图解析器,并将异常处理的视图页面放在了WEB-INF目录下的error子目录中。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

至此,Spring MVC全局异常处理配置完成。

二、单元测试

单元测试是软件开发过程中必不可少的一环,能够有效地保证软件的质量和稳定性。在本例中,使用了JUnit和Mockito两个Java测试框架。

2.1 配置pom.xml

在pom.xml文件中添加JUnit和Mockito的依赖。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.22.0</version>
    <scope>test</scope>
</dependency>

2.2 编写单元测试类

编写单元测试类,使用Mockito对依赖对象进行模拟,然后测试要求的功能。

@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {

    @InjectMocks
    private UserServiceImpl service;

    @Mock
    private UserRepository repository;

    @Test
    public void testDelete() {
        when(repository.delete(1L)).thenReturn(1);
        service.delete(1L);
        verify(repository, times(1)).delete(1L);
    }
}

2.3 运行测试

通过运行JUnit测试,可以验证代码的正确性,并及时发现问题并修复。

至此,单元测试部分完成。

示例一:

public void testDelete() {
    when(repository.delete(1L)).thenReturn(1);
    service.delete(1L);
    verify(repository, times(1)).delete(1L);
}

该单元测试用来测试业务服务的delete方法是否能够正确地调用持久层的delete方法,并返回正确的结果。

示例二:

public void testResolveException() {
    ModelAndView modelAndView = exceptionHandler.resolveException(request, response, null, new BusinessException("业务异常"));
    Assert.assertNotNull(modelAndView);
    Assert.assertEquals("业务异常", modelAndView.getModel().get("errorMsg"));
    Assert.assertEquals("error/business_error", modelAndView.getViewName());
}

该单元测试用来测试全局异常处理器能否正确地处理业务异常,并且返回正确的错误页面。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC全局异常处理和单元测试_动力节点Java学院整理 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • IntelliJ IDEA设置JVM运行参数的操作方法

    下面是详细的 “IntelliJ IDEA设置JVM运行参数的操作方法”攻略: 什么是JVM运行参数? JVM运行参数指定了在Java应用程序内部运行时,JVM使用的命令行参数。这些参数可以用于调整JVM的行为和性能,例如内存分配,垃圾回收策略,线程数等。在Java应用程序中,可以通过设置JVM运行参数更好地配置JVM,以来优化应用的性能和稳定性。 Inte…

    Java 2023年5月19日
    00
  • java使用Feign实现声明式Restful风格调用

    Java 的 Feign 库提供了一种声明式的 RESTful 风格的调用方法,可以让我们更加便捷地进行服务调用。下面是使用 Feign 实现声明式 RESTful 风格调用的完整攻略。 什么是 Feign Feign 是 Netflix 开源的一种声明式、模板化的 HTTP 客户端,它的主要作用就是让开发者更加方便的调用 RESTful 风格的 API。 …

    Java 2023年5月31日
    00
  • 基于Java在netty中实现线程和CPU绑定

    基于Java在netty中实现线程和CPU绑定,可以提高系统的稳定性和性能。以下是具体的实现攻略。 一、绑定CPU 绑定CPU可以有效避免Java进程因为线程数量过多和线程切换而导致CPU资源繁忙,从而降低系统的性能。在Java中绑定CPU可以通过任务调度类java.util.concurrent.ScheduledThreadPoolExecutor中的s…

    Java 2023年5月19日
    00
  • Spring Boot 直接用jar运行项目的方法

    Spring Boot应用程序可以打包成可执行的jar文件,方便部署和运行。本文将详细讲解如何使用jar文件运行Spring Boot应用程序,包括如何打包jar文件、如何运行jar文件等。 打包jar文件 在使用jar文件运行Spring Boot应用程序之前,需要先打包jar文件。可以使用Maven或Gradle等构建工具打包jar文件。以下是一个使用M…

    Java 2023年5月15日
    00
  • 详解IDEA搭建springBoot方式一(推荐)

    下面是详细讲解 “详解IDEA搭建springBoot方式一(推荐)” 的完整攻略: 一、前置准备 安装JDK和IntelliJ IDEA。 确认本地已经安装了maven,并且配置了maven环境变量。 二、创建Spring Boot项目 打开IntelliJ IDEA,选择Create New Project。 在左侧的“Spring Initializr…

    Java 2023年5月15日
    00
  • 老生常谈onBlur事件与onfocus事件(js)

    一、简介: onBlur事件和onfocus事件是JavaScript中关于input、textarea等表单元素的两种常见事件。其中onBlur事件当元素失去焦点时触发,而onfocus事件当元素获得焦点时触发。 二、具体使用方法: onfocus事件 :当元素获得焦点时触发,即当鼠标点击input或者textarea的时候,触发该事件。 示例代码: &l…

    Java 2023年6月15日
    00
  • 解决spring-boot 打成jar包后 启动时指定参数无效的问题

    当使用Spring Boot打成JAR包后,有时候需要在启动时指定参数来配置应用程序。但是有时候会遇到启动时指定的参数无效的问题,这时候需要按照以下步骤来解决这个问题: 1.在application.properties文件中配置参数 Spring Boot的配置文件默认是application.properties,我们可以在这个文件中配置应用程序需要的参…

    Java 2023年5月19日
    00
  • 精致小巧的java相册制作方法

    精致小巧的Java相册制作方法 在本教程中,我们将学习如何使用Java语言制作一个简单的相册。相册将具有以下特点: 界面简洁,易用性高 可以显示图片,并允许用户使用翻页按钮浏览图片 用户可以通过控制按钮放大或缩小图片 1. 准备工作 在开始之前,请确保你已经安装好了以下软件和工具: JDK 1.8或以上版本 Eclipse或其他合适的Java IDE Swi…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部