SpringBoot中如何使用AOP统一处理web层异常

这篇文章主要为大家展示了“Spring Boot中如何使用AOP统一处理web层异常”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring Boot中如何使用AOP统一处理web层异常”这篇文章吧。

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站制作、成都外贸网站建设、拱墅网络推广、小程序开发、拱墅网络营销、拱墅企业策划、拱墅品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供拱墅建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

在springboot错误默认是跳转到 请求返回渲染路径中的error/错误页面中。

源码分析:DefaultErrorViewResolver.java

 private ModelAndView resolve(String viewName, Map 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/错误页面中。

Spring Boot中如何使用AOP统一处理web层异常

使用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中如何使用AOP统一处理web层异常
本文地址:http://myzitong.com/article/jiccdc.html