自定义注解:ResultAble和ResultInfoAop

功能

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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容