controller拦截器,给实体类增加字段


@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 recordList = pageInfo.getList();

            List 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 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形式
                JSONObject objectMap = convertJsonObject(object);
                //为了在遍历的时候向map中新增,复制出一个map,遍历新map即可
                JSONObject copyMap = objectMap.clone();
                Iterator> iterator = copyMap.entrySet().iterator();
                while (iterator.hasNext()) {
                    Map.Entry entry = iterator.next();
                    String key = entry.getKey();
                    if (key.equals("stuId")) {
                        objectMap.put("stuName", "123");
                    }
                }
                newJson.add(objectMap);
            }
        }
        //返回新的list 
        return newJson;
    }
} 
  

1.在主启动类添加注解

@EnableAspectJAutoProxy

2.添加依赖

 
            org.springframework
            spring-aop
        
        
            org.aspectj
            aspectjweaver
            1.9.7
        

你可能感兴趣的:(spring-boot,windows)