当前位置: 首页 > 编程笔记 >

Spring Boot中使用AOP统一处理web层异常的方法

易俊友
2023-03-14
本文向大家介绍Spring Boot中使用AOP统一处理web层异常的方法,包括了Spring Boot中使用AOP统一处理web层异常的方法的使用技巧和注意事项,需要的朋友参考一下

在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:/