@Aspect
@Order(99999)
@Component
public class ResponseInterceptor {
@Pointcut("execution(public * com.studentscore.project.controller.*.*(..))")
public void getPointCut() {
}
@AfterReturning(pointcut = "getPointCut()", returning = "result")
public void interceptResponse(Object result) {
//如果是R返回类
if (result instanceof R) {
result = ((R) result).getData();
//如果不是分页返回类
if (!(result instanceof PageInfo)) {
return;
}
PageInfo pageInfo = (PageInfo) result;
List<Object> recordList = pageInfo.getList();
List<Object> newList = updateRecord(recordList);
pageInfo.setList(newList);
}
}
//判断是否是基本数据类型(区别于自己建的类)
private boolean isJavaLong(Object obj) {
return obj.getClass().getName().startsWith("java.lang");
}
//将自定义的类转为Map对象
private JSONObject convertJsonObject(Object obj) {
String jsonString = JSON.toJSONString(obj);
JSONObject jsonObject = JSON.parseObject(jsonString);
return jsonObject;
}
//如果字段中有stuId,则新增一个stuName字段
private List updateRecord(List<Object> list) {
JSONArray objects = new JSONArray(list);
JSONArray newJson = new JSONArray();
for (Object object : objects) {
//如果list中的数据 是java的基础数据类型,不处理(举例:对产品名做分页查询)
if (isJavaLong(object)) {
newJson.add(object);
}
//如果list中不是java的基础数据类型,是自己的类或者map等,则可能有要转换的stuId
else {
//将实体类转为Map<String,Object>形式
JSONObject objectMap = convertJsonObject(object);
//为了在遍历的时候向map中新增,复制出一个map,遍历新map即可
JSONObject copyMap = objectMap.clone();
Iterator<Map.Entry<String, Object>> iterator = copyMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Object> entry = iterator.next();
String key = entry.getKey();
if (key.equals("stuId")) {
objectMap.put("stuName", "123");
}
}
newJson.add(objectMap);
}
}
//返回新的list
return newJson;
}
}
1.在主启动类添加注解
@EnableAspectJAutoProxy
2.添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>