spring aop处理返回结果
程序员文章站
2022-05-26 14:18:18
...
/**
* 处理返回结果
*
* @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;
}
}
上一篇: ai怎么绘制漫画人文水汪汪的大眼睛?
下一篇: MAYA 硬边和不规则建筑作品解析
推荐阅读
-
详解使用Spring Boot的AOP处理自定义注解
-
spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法
-
浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现)
-
spring boot 使用Aop通知打印控制器请求报文和返回报文问题
-
Spring Boot 使用WebAsyncTask异步返回结果
-
spring boot请求异常处理并返回对应的html页面
-
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常
-
spring boot 使用Aop通知打印控制器请求报文和返回报文问题
-
spring AOP定义AfterThrowing增加处理实例分析
-
jQuery - 拦截所有Ajax请求(统一处理超时、返回结果、错误状态码 )