Spring Boot中使用AOP统一处理web层异常的方法
程序员文章站
2022-06-30 23:49:47
在springboot错误默认是跳转到 请求返回渲染路径中的error/错误页面中。
源码分析:defaulterrorviewresolver.java
p...
在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层异常,希望对大家有所帮助