Spring MVC处理异常 本人独立博客https://chenjiabing666.github.io 关于异常 异常的体系结构: Throwable Error...RuntimeException NullPointerException:某个为null的对象调用了属性或方法 ClassCastException:强制转换为不匹配的数据类型...IOException:输入输出(读写)异常 FileNotFoundException:文件找不到 在Spring MVC中处理异常 在Spring...使用SimpleMappingExceptionResolver 在Spring MVC中,有SimpleMappingExceptionResolver类,用于配置异常与View组件的映射关系,如果确定某种异常出现后都会显示某个...Spring MVC小结 解决MVC中V与C的关系的,即如何接收请求并响应; 在Spring的配置文件中,最主要的配置是组件扫描和ViewResolver; 重点掌握@RequestMapping注解,
() 模拟抛出异常 doThrow(new RuntimeException()).when(event).getName(); 当调用 event.getName() 时抛出RuntimeException...setName(anyString()); event.setName("name"); 当调用 event.setName("name") 只有参数是“name”时通过,其他值抛出异常...RuntimeException()).when(event).setName("name"); event.setName("name"); event.setName("name"); 第一次什么都不做,第二次抛出异常...都是由Spring 容器注入,使用spring-test提供的测试。...而且不要使用公共配置,保持每个单元测试之间相互独立,在测试时依赖的Bean越多说明逻辑越复杂,就需要将代码重构。 Spring-boot-test maven依赖 <!
前面学习过struts2的异常处理,今天来看下spring mvc4的异常处理: 一、Servlet配置文件修改 1 <bean id="exceptionResolver" 2...:interceptors> spring mvc的拦截器提供了4个处理方法: preHandle在Controller被调用前,先执行,可以在这里执行一些安全检查(上面示意了如何对IP做限制) postHandle...,这里可以记录异常日志 afterConcurrentHandlingStarted这个没怎么研究过,暂时不做评价 值得一提的是:spring-mvc中的拦截器,虽然可以在afterCompletion...中记录异常日志,但如果按前面的baseController配合@ExceptionHandler做了处理,这里的ex就变成了null,因为异常在前面已经得到了处理,所以这二种方法不推荐混用,另外afterCompletion...附:ajax的统一异常处理,请移步 Struts2、Spring MVC4 框架下的ajax统一异常处理
spring提供test测试模块,所以现在小胖哥带你来玩下springboot下的Mock单元测试,我们将对controller,service 的单元测试进行实战操作。 2.依赖引入 ?...该依赖提供了一下类库 JUnit 4: 目前最强大的java应用单元测试框架 Spring Test & Spring Boot Test: Spring Boot 集成测试支持....我们在Spring Boot maven项目的单元测试包test下对应的类路径 编写自己的测试类 ? 前两个注解不用说,第三个注解可能你们很陌生。这个是用来开启Mock Mvc测试的自动化配置的。...一旦请求不通过将抛出java.lang.AssertionError错误, 会把期望值(Expected)跟实际值打印出来(下图2标识)。如果跟预期相同只会出现下图1。 ?...这里我们会用到Mockito 测试场景描述如下: 指定打桩对象的返回值 判断某个打桩对象的某个方法被调用及调用的次数 指定打桩对象抛出某个特定异常 一般有以下几种组合: do/when:包括doThrow
(2)处入参的异常名相同,这个异常增强只在连接点抛出的异常instanceof IllegalArgumentException才匹配,增强方法通过iae参数可以访问抛出的异常对象。..."/> beans> ---- 单元测试 package com.xgj.aop.spring.advisor.aspectJAdvance.bindException; import org.junit.Test...,异常增强起效,处理完成后,再向外抛出IllegalArgumentException。...如果将①处的代码调整为dealBussiness(“bug2”)后,再运行代码,将只看到异常输出的信息,异常增强没有任何动作,这是因为RuntimeException 不按类型匹配于 IllegalArgumentException...,切点不匹配。
引言在使用Spring MVC开发Web应用程序时,您可能会遇到org.springframework.web.HttpMediaTypeNotAcceptableException: Could not...当服务器无法找到适合客户端请求的可接受的表示形式(媒体类型)时,就会抛出HttpMediaTypeNotAcceptableException异常。...Spring MVC通过ContentNegotiationConfigurer类提供了配置媒体类型转换器的方式。...在Spring MVC中,媒体类型转换器负责将Java对象转换为客户端所需的媒体类型,例如JSON或XML。确保服务器正确配置了适当的媒体类型转换器是解决此问题的第一步。...以下是一个示例配置,演示如何在Spring MVC中配置媒体类型转换器:@Configuration@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer
概述 在Web应用程序中,错误和异常是不可避免的。Spring MVC框架提供了@ExceptionHandler注解,用于捕获和处理控制器中抛出的异常。...本文将深入探讨@ExceptionHandler的用法和原理,并结合实际项目场景,介绍如何在Spring MVC应用中实现统一异常处理的最佳实践。...@ExceptionHandler的用法 @ExceptionHandler是Spring MVC框架中用于处理异常的注解。...modelAndView.addObject("errorMessage", ex.getMessage()); return modelAndView; } } 在上述代码示例中,当控制器中抛出...结论 Spring MVC的@ExceptionHandler注解为Web应用程序提供了便捷的异常处理机制。通过使用该注解,可以在控制器中捕获和处理特定类型的异常,提供友好的错误信息给用户。
Spring Web MVC对异常处理有着完善的支持,我们可以捕获控制器中抛出的任何异常,然后按照异常类型将异常信息映射到某个视图文件,向用户显示对应的信息。...它可以定义到一个控制器中,处理该控制器抛出的异常。@ExceptionHandler注解接受一个Class,指定捕获哪个异常。如果不指定这个值,则捕获方法参数列表中的所有异常。...也可以自己实现一个HandlerExceptionResolver用于处理异常。使用方法可以参考这篇博客Spring MVC 系统异常处理方式及性能对比。...Handling Standard Spring MVC Exceptions 使用@ResponseStatus注解业务异常 我们的业务代码的异常可以使用@ResponseStatus注解。...在Spring Web MVC中,该页面不仅可以是一个HTML或JSP页面,也可以是控制器中某个处理方法接受的URL。
默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚,spring aop异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚...throw new SystemException("添加饼图配置失败"); } return rsp; } } Service层代码也要抛出异常...这是因为Controller方法抛出异常后,程序就中断了,中断后,直接把异常抛给前台页面了。...如此看来,在Contrller层进行这种事物处理的时候,既要保证事物的执行,又不要抛出异常、返回自定义消息给前台页面,这二者不可兼得。...那就只有一个办法了,把3个service封装到另外一个service层进行事物控制,然后抛出异常,代码如下: public void insertPieCharData(ReqPieDto reqPieDto
纳闷了一会儿,看到双层事务,就想起了 Spring事务传播机制,前边理解得比较肤浅。Spring 系列面试题和答案我全部整理好了,请关注公众号Java技术栈,回复:面试。...3、PROPAGATION_MANDATORY 当前存在事务,就加入事务;当前不存在事务,就抛出异常。 4、PROPAGATION_REQUIRES_NEW 无条件创建新事务。...6、PROPAGATION_NEVER 以非事务方式运行,如果存在事务,就抛出异常。...具体原因 1、看了上边的事务传播机制,继续细化问题,内外层共用一个事务,内层抛出异常,会导致整个事务失败。...2、继续分析,外层逻辑进行了 try catch,就导致内层的异常无法继续向上抛出,外层事务会继续提交。
概述 实例 概述 异常抛出增强表示在目标方法抛出异常后实施增强,最适合的场景是事务管理,比如当参与事事务的方法抛出异常后需要回滚事务。...异常抛出增强类需要实现ThrowsAdvice接口,ThrowsAdvice接口并没有定义任何的方法,它只是一个标志接口。 在运行期,Spring采用反射的机制来进行判断。...我们必须采用以下的形式来定义异常抛出的方法 public void afterThrowing(Method method,Object[] args,Object target,Throwable...也可以在异常增强类中定义多个方法,Spring会自动选择匹配的方法来进行调用。...在类的继承树上,两个类的距离越近,则两个类的相似度越高,那么当方法抛出异常时,会优先选取异常入参和抛出的异常相似度最高的afterThrowing方法。
Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,在了解 Mockito 的具体用法之前...管理的 bean、模拟方法的返回值、模拟抛出异常...等,他同时也会记录调用这些模拟方法的参数、调用顺序,从而可以校验出这个 mock 对象是否有被正确的顺序调用,以及按照期望的参数被调用 像是 Mockito...在 SpringBoot 单元测试中使用 Mockito 首先在 pom.xml 下新增 spring-boot-starter-test 依赖,该依赖内就有包含了 JUnit、Mockito <dependency...,要改用 doThrow() 抛出 Exception Mockito.doThrow(new RuntimeException("mock throw exception")).when(userService...总结 Mockito 是一个非常强大的框架,可以在执行单元测试时帮助我们模拟一个 bean,提高单元测试的稳定性 并且大家可以尝试在写代码时,从 mock 测试的角度来写,更能够写出功能切分良好的代码架构
2、Spring Boot设置index默认页面 新建一个类,继承WebMvcConfigurerAdapter类,并加上@Configuration,此方式在tomcat没有配置默认访问页面的情况下生效...value="/") public String index(){ return "index"; } } 4、Controller 配置index默认页面 如果tomcat和Spring...Boot没有配置默认访问页面,Spring 会主动去寻找 Controller 的 index。...因为tomcat的优先级比Spring高,相应于是最高的。以上的配置,都会先去tomcat是否配置默认访问页面。...遇到问题:使用了第2种Spring Boot设置默认访问方式,由于是使用外部的tomcat,并且tomcat配置了几个默认访问页面。
什么是单元测试?...;完善的单元测试技能快速定位开发过程中的BUG,同时也可以减少因为BUG导致对接过程带来的大量人员沟通所消耗的时间成本。...当需要持续性完善及优化代码的时候,一个好的单元测试用例能够帮助我们快速的确认修改是否对预期产生影响。...单元测试的方式 浏览器测试;当我们开发好一个接口,如:/user/1,那我们就可以在浏览器中输入:http://127.0.0.1/order/1 看是否能得到我们期望的结果;这种方式的特点就是简单,缺点是只能测试...GET接口; PostMan;市面上很多类似的工具,功能强大,简单好用;缺点是可配置性较弱; MockMvc;Spring MVC服务端测试工具,功能强大,灵活性更强,可配置性更强,更有利于调整或成功之后的功能确认
举个例子: 类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D、E、F 等,假设类 D 是一个外部服务,那就会很难测,因为你的返回结果会直接的受外部服务影响,导致你的单元测试可能今天会过...---- What’s Mockito Mockito 是一种 Java Mock 框架,主要就是用来做 Mock 测试的,它可以模拟任何 Spring 管理的 Bean、模拟方法的返回值、模拟抛出异常等等...像是 Mockito 可以在单元测试中模拟一个 Service 返回的数据,而不会真正去调用该 Service,通过模拟一个假的 Service 对象,来快速的测试当前想要测试的类。...RuntimeException 如果方法没有返回值的话(即是方法定义为 public void myMethod() {…}),要改用 doThrow() 抛出 Exception。...Mockito.doThrow(new RuntimeException("mock throw exception")).when(userService).print(); userService.print
对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试。...如下将详细阐述如何使用MockMvc测试框架实现对“Spring Controller”进行单元测试,基于Spring Boot开发框架进行验证。 添加测试框架依赖: <!...容器进行配置,包含了Spring MVC环境和所有“Controller”类,通常使用这种方式。...容器进行配置,包含了Spring MVC环境和所有“Controller”类。...写在最后 使用Spring提供的测试框架MockMvc可以非常方便地实现对HTTP服务接口进行单元测试,不要把基础的功能验证工作都交给测试童鞋,应该通过单元测试来保证代码迭代的稳定性。
异常测试 它用于测试由方法抛出的异常。...ArithmeticException异常,因为这是一个预期的异常,因此单元测试会通过。...它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。...为返回值为void的函数通过Stub抛出异常 doThrow(new RuntimeException()).when(mockedList).clear(); // 调用这句代码会抛出异常 mockedList.clear...(3). web模块的单元测试 要测试 Spring MVC 控制器是否按预期工作,请使用@WebMvcTest注释。
Running with Spring Boot v2.5.4, Java 11.0.12 当前,Spring统一异常处理机制是Java开发人员普遍使用的一种技术,在业务校验失败的时候,直接抛出业务异常即可...值得一提的是,统一异常处理机制并不是Spring Boot提供的,而是Spring MVC,前者只是为Spring MVC自动配置了刚好够用的若干组件而已,具体配置了哪些组件,感兴趣的读者可以到spring-boot-autoconfigure...1 异常从何而来 DispatcherServlet是Spring MVC的门户,所有Http请求都会通过DispatcherServlet进行路由分发,即使Http请求的处理流程抛出了异常。...spring.mvc.throw-exception-if-no-handler-found=true这一项配置!...4 参考文章 https://docs.spring.io/spring-framework/docs/5.3.9/reference/html/web.html#mvc-exceptionhandlers
因此,在单元测试中,也可能会面对它。...在之前的案例中,笔者介绍了两种Mock的场景: 1)在给定输入参数的情况下给出需要的输出结果(返回值) 2)在给定输入参数的情况下方法抛出某种类型的异常 对于被Mock的某个对象的void方法来说,对于之前的第一种场景是没有意义的...不过它也有如下的两种测试场景: 1)验证程序的行为-该void方法是否被调用 2)在给定输入参数的情况下方法抛出某种类型的异常 譬如在之前的StockService中增加print方法,并申明为void...来看第二个关于异常的场景。这个和普通有返回值的方法的异常测试略有不同。...通过这个测试用例,就展示了如何针对void方法抛出异常的情况进行测试了。
异常映射 异常机制是Java程序中针对有可能发生的问题所提前作出的应急解决方案。...在SpringMVC中可以通过异常映射的方式,将异常类型和某个视图名称对应起来,让用户不是看到异常信息,而是一个比较友好的界面。...解决方案: 在spring-mvc.xml error 分布式架构中没有Spring-mvc.xml
领取专属 10元无门槛券
手把手带您无忧上云