功能
ResultAble 注解的方法返回的对象需要是一个Result对象。
加上这个注解后,方法当出现异常的时候,会由ResultInfoAop进行处理,ResultInfoAop会将抛出的异常捕获,并会将异常封装成Result对象,返回给调用者
注解定义
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResultAble {
}
注解处理
/**
* 处理ResultAble 切面
*/
@Aspect
@Component
public class ResultInfoAop {
private final Logger log = LoggerFactory.getLogger(this.getClass());
/**
* 切面位置是{@link com.smartj.web.common.result.annotation.ResultAble} 标注的方法
*/
@Pointcut("@annotation(com.smartj.web.common.result.annotation.ResultAble)")
public void pointcut() {
}
/**
* 处理切面<P>
* 如果没有异常则正常返回,如果有异常则将异常包装成Result
*
* @param point 连接点
* @return Result对象
* @throws Throwable 异常
*/
@Around("pointcut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
Object proceed;
try {
proceed = point.proceed();
} catch (Exception e) {
log.error(point.getSignature().getName() + ":", e);
proceed = ResultUtil.error(e);
}
return proceed;
}
}