spring aop处理返回结果

/**
 * 处理返回结果
 *
 * @author admin
 */
@Aspect
public class ResultPoint {

    private static Log LOG = LogFactory.getLog(SortPoint.class);

    @AfterReturning(value = "@annotation(注解A) || @annotation(注解B)", returning = "result")
    public void sortDealWith(JoinPoint jp, Object result) {
        if (Objects.nonNull(result)) {
            var baseClass = result.getClass().getSuperclass();
            //AbstractBaseResult.class为返回结果继承父类
            if (baseClass.equals(AbstractBaseResult.class)) {
                var returnResult = (AbstractBaseResult) result;
                if (MapTool.isNotEmpty(returnResult.getDicts())) {
                    if (returnResult.getReturnMap().containsKey("SORT_KEY")) {
                        //在方法里已处理不进行处理
                        return;
                    }
                }
                try {
                    Signature signature = jp.getSignature();
                    MethodSignature methodSignature = (MethodSignature) signature;
                    Method targetMethod = methodSignature.getMethod();
                    Type returnType = targetMethod.getGenericReturnType();
                    if (returnType instanceof ParameterizedType) {
                        // 返回类型是泛型类型
                        var targetType = ((ParameterizedType) returnType)
                                .getActualTypeArguments()[0];
                        if (targetType instanceof Class) {
                            var targetClass = ((Class) targetType);
                            if (targetClass.isPrimitive() || isWrapClass(targetClass)) {
                                //泛型为基础类型或包装类型跳过
                                return;
                            }
                              returnResult.getReturnMap().putAll(处理值方法(targetClass));
                        }
                    }
                } catch (Exception e) {
                    LOG.error("获取排序字段异常",e);
                }
            }
        }
    }

    /**
     * 是否为包装类型
     */
    private boolean isWrapClass(Class clz) {
        try {
            return ((Class) clz.getField("TYPE").get(null)).isPrimitive();
        } catch (Exception e) {
            return false;
        }
    }

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值