springboot统一切面日志和异常处理

 

clouds234@163.com

2018-8-1

springboot2.0.4可用

1 统一请求日志记录

在controller层添加统一的请求日志记录:

添加依赖包:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

统一切面日志类;

@Aspect

@Component

public class AopLogWebapi3 {

 

private static Logger logger=LoggerFactory.getLogger(AopLogWebapi3.class);

//设置切面;

@Pointcut("execution(public * com.c.swager.controller.*.*(..))")

public void log(){}

// /**

// * @Before 在方法执行之前执行

// * */

// @Before("log()")

// public void doBefore(){

// logger.info("doBefore~~~");

// //System.out.println("doBefore");

//

// }

// /**

// * @After在方法执行之后执行

// * */

// @After("log()")

// public void doAfter(){

// logger.info("doAfter~~~");

// //System.out.println("doAfter");

// }

/**统一设置请求日志记录;

* @Before 在方法执行之前执行

* */

@Before("log()")

public void doBefore(JoinPoint joinPoint){

// logger.info("doBefore");

//记录http请求

ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();

HttpServletRequest request = attributes.getRequest();

//从request中获取http请求的url/请求的方法类型/响应该http请求的类方法/IP地址/请求中的参数

//url

 

logger.info("url={}",request.getRequestURI());

 

//method

logger.info("method={}",request.getMethod());

 

//ip

logger.info("ip={}",request.getRemoteAddr());

 

//类方法

logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+

"."+joinPoint.getSignature().getName());

 

//参数

 

// logger.info("args={}",joinPoint.getArgs());

 

logger.info("ARGS={}", Arrays.toString(joinPoint.getArgs()));

//获取所有参数方法一:

// Enumeration<String> enu=request.getParameterNames();

// while(enu.hasMoreElements()){

// String paraName=(String)enu.nextElement();

// System.out.println(paraName+": "+request.getParameter(paraName));

// }

}

/**

* 因返回类型不统一;所以使用object接收;

*/

@AfterReturning(returning = "object",pointcut = "log()")

public void doAfterReturning(Object object){

logger.info("UserTest={}",(UserTest)object);

}

}

2 统一异常处理

创建全局异常处理类:通过使用@RestControllerAdvice或@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义;Restcontrolleradvice返回json格式数据;ControllerAdvice返回视图类型数据。@ExceptionHandler用来定义函数针对的异常类型,最后将Exception对象和请求URL映射到返回结果中;

案例中R是自定义的统一响应数据格式;实质上是一个map;

@RestControllerAdvice //声明统一切面异常捕获;

public class RRExceptionHandler{

 

@ExceptionHandler(RRException.class) //声明要捕获的异常类型;

public R handleRRException(RRException e){

R r = new R();

r.put("code",e.getCode()):

r.put("msg",e.getMessage()):

 

return r;

}

 

@ExceptionHandler(Exception.class)

public R handleException(Exception e){

 

logger.error(e.getMessage(),e);

return R.errot();

 

}

 

}

 

定义以上统一异常处理类后,就会在controller层出现对应异常时返回对应方法的返回值;

 

RRException是自定义异常类;内容如下:

public class RRException exends RuntimeException{

provate static final long serialVersionUID=1L;

 

private String msg;

private int code = 500;

 

public RREception(String msg){

super(msg):

this.msg=msg;

}

 

..........................................重载方法;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值