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<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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,annotation、config、controller、dao、e、interceptor、model、service、utils是一些常见的关键词,它们在Java开发中扮演着不同的角色和功能。下面是对它们的简要介绍: 1. Annotation(注解):注解是一种用于提供元数据的标记,可以应用于类、方法、字段等。它们可以用于编译时的静态检查、运行时的动态处理以及生成文档等用途。 2. Config(配置):Config(配置)通常指的是应用程序的配置文件,其中包含了一些参数、属性或者其他设置,用于配置应用程序的行为。 3. Controller(控制器):Controller(控制器)是MVC(Model-View-Controller)模式中的一部分,负责接收用户请求并处理相应的业务逻辑,然后返回响应给用户。 4. DAO(数据访问对象):DAO(数据访问对象)是一种设计模式,用于封装对数据库或其他持久化机制的访问。它提供了一组接口或类,用于对数据进行增删改查等操作。 5. Entity(实体):Entity(实体)通常指的是与数据库表或其他持久化机制中的数据结构相对应的Java类。它们用于表示数据模型,并提供了与数据库交互的方法。 6. Interceptor(拦截器):Interceptor(拦截器)是一种用于在请求处理的不同阶段进行拦截和处理的机制。它可以用于实现日志记录、权限验证、异常处理等功能。 7. Model(模型):Model(模型)是MVC模式中的一部分,用于表示应用程序的数据结构和业务逻辑。它通常包含了与数据库交互的方法和数据验证规则等。 8. Service(服务):Service(服务)是一种提供特定功能的组件或类,用于封装业务逻辑。它们通常被Controller调用,用于处理复杂的业务操作。 9. Utils(工具类):Utils(工具类)是一些提供常用功能或方法的类。它们通常包含了一些静态方法,用于简化开发过程中的常见操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值