欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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/错误页面中。

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层异常,希望对大家有所帮助