package com.moral.common.aop;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Aspect;
|
import org.springframework.stereotype.Component;
|
|
import com.moral.common.exception.BusinessException;
|
|
import lombok.extern.log4j.Log4j;
|
|
@Log4j
|
@Aspect
|
@Component
|
public class ControllerAOP {
|
|
@Around("execution(* com.moral.controller.*Controller.*(..))")
|
public Object handlerControllerMethod(ProceedingJoinPoint pjp) {
|
long startTime = System.currentTimeMillis();
|
Map<String, Object> result;
|
try {
|
result = (Map<String, Object>) pjp.proceed();
|
log.info(pjp.getSignature() + "use time:" + (System.currentTimeMillis() - startTime));
|
} catch (Throwable e) {
|
result = handlerException(pjp, e);
|
}
|
|
return result;
|
}
|
|
private Map<String, Object> handlerException(ProceedingJoinPoint pjp, Throwable e) {
|
Map<String, Object> result = new HashMap<String, Object>();
|
|
// 已知异常
|
if (e instanceof BusinessException) {
|
result.put("msg", e.getLocalizedMessage());
|
} else {
|
log.error(pjp.getSignature() + " error ", e);
|
result.put("msg", e.toString());
|
//TODO 未知的异常,应该格外注意,可以发送邮件通知等
|
}
|
|
return result;
|
}
|
}
|