在springboot错误默认是跳转到 请求返回渲染路径中的error/错误页面中。
源码分析:DefaultErrorViewResolver.java
private ModelAndView resolve(String viewName, Map<String, Object> model) { String errorViewName = "error/" + viewName; TemplateAvailabilityProvider provider = this.templateAvailabilityProviders .getProvider(errorViewName, this.applicationContext); if (provider != null) { return new ModelAndView(errorViewName, model); } return resolveResource(errorViewName, model); }
比如在application.properites中配置渲染页面为
#配置freemaker spring.freemarker.template-loader-path=/WEB-INF/
如果不配置spring.freemarker.template-loader-path,springboot会在src/main/resources中的templates中的error文件下下找错误渲染的页面。
那么当出现错误时,系统会跳转到/WEB-INF/error/错误页面中。
使用AOP进行web层异常处理
package com.niugang.aop; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.servlet.ModelAndView; /** * controller层统一异常处理 * * @author niugang * */ @Aspect @Component public class ExceptionControllerAscept { private Logger logger = LoggerFactory.getLogger(ExceptionControllerAscept.class); /** * 匿名切点的方式 * * @param ex * @throws ServletException * @throws IOException */ @AfterThrowing(value = "execution(public * com.niugang.controller..*.*(..))", throwing = "ex") public ModelAndView aroundAdvice(Exception ex) throws ServletException, IOException { ModelAndView modelAndView = new ModelAndView(); RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes r = (ServletRequestAttributes) requestAttributes; HttpServletRequest request = r.getRequest(); modelAndView.setViewName("500"); // 第一如果是 RuntimeException if (ex instanceof RuntimeException) { logger.error("抛出运行时异常{}", ex.getMessage()); modelAndView.addObject("exception", ex.getMessage()); // 跳转到错误页面 modelAndView.addObject("url", request.getRequestURL()); return modelAndView; } modelAndView.addObject("exception","未知异常"); return modelAndView; } }
总结
以上所述是小编给大家介绍的Spring Boot中使用AOP统一处理web层异常,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍SpringBoot使用统一异常处理详解,包括了SpringBoot使用统一异常处理详解的使用技巧和注意事项,需要的朋友参考一下 场景:针对异常处理,我们原来的做法是一般在最外层捕获异常即可,例如在Controller中 这样的话也能解决部分问题,但是无法获取到自己指定的异常,引入全局统一异常处理的话将会极大的改善代码,减少冗余代码的产生。 自定义异常类:注意要继承自RuntimeE
但是,我想改变它,这样从域层抛出的异常将在AOP层中处理。AOP层会产生某种错误响应,并将其发送回spring控制器/web服务层。 我可以创建一个IBizResponse并创建它的两个子类/接口,可能是SuccessResponse和ErrorResponse,并使域层方法返回IBizResponse。但是,我不知道如何使AOP将ErrorResponse对象返回到服务层。
本文向大家介绍详解Spring Boot中使用AOP统一处理Web请求日志,包括了详解Spring Boot中使用AOP统一处理Web请求日志的使用技巧和注意事项,需要的朋友参考一下 在spring boot中,简单几步,使用spring AOP实现一个拦截器: 1、引入依赖: 2、创建拦截器类(在该类中,定义了拦截规则:拦截com.xjj.web.controller包下面的所有类中,有@Re
本文向大家介绍SpringMVC统一异常处理三种方法详解,包括了SpringMVC统一异常处理三种方法详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringMVC-统一异常处理三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在 Spring MVC 应用的开发中,不管是对底层数据库操作,还是业务层或控制层操作,都
本文向大家介绍java基于spring注解AOP的异常处理的方法,包括了java基于spring注解AOP的异常处理的方法的使用技巧和注意事项,需要的朋友参考一下 一、前言 项目刚刚开发的时候,并没有做好充足的准备。开发到一定程度的时候才会想到还有一些问题没有解决。就比如今天我要说的一个问题:异常的处理。写程序的时候一般都会通过try...catch...finally对异常进行处理,但是我们真的
本文向大家介绍SpringBoot项目中使用AOP的方法,包括了SpringBoot项目中使用AOP的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍了SpringBoot项目中使用AOP的方法,分享给大家,具体如下: 1.概述 将通用的逻辑用AOP技术实现可以极大的简化程序的编写,例如验签、鉴权等。Spring的声明式事务也是通过AOP技术实现的。 具体的代码参照 示例项目 https:/