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

网友投稿 280 2023-02-14


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

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

源码分析:DefaultErrorViewRehttp://solver.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/错误页面中。

使用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;

impoouUAmlZrt 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.webouUAmlZ.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层异常,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序开发者接口(小程序的接口)
下一篇:api数据接口管理能力(接口数据处理)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~