• 面试官:有一个 List 对象集合,如何优雅地返回给前端?


    020839eb59c5edf490e14e06e6be4544.jpeg

    1.业务背景

    业务场景中,一个会话中存在多个场景,即一个session_id对应多个scene_id和scene_name

    如果你写成如下的聚合模型类

    public  class SceneVO {
      private String sessionId;
      private String sceneId;
      private String sceneName;
      // 省略对应的getter和setter方法
    }

    返回的List形式如下,这个数据在data属性中

    {
      "data":[
      {
        "sessionId":  "jksadhjksd",
        "sceneId": "NDJWKSDSJKDKED",
        "sceneName": "场景1"
      },
      {
        "sessionId":  "jksadhjksd",
        "sceneId": "KLJSDJKLSDFALK",
        "sceneName": "场景2"
      },
      {
        "sessionId":  "jksadhjksd",
        "sceneId": "KERFJKOVDJKDSS",
        "sceneName": "场景3"
      }
     ]
    }

    每个对象里面都带上了重复的一个sessionId数据,我想提出来该怎么办?

    我想改为如下形式,sessionId提出到外层,更能体现出一个sessionId对应多个sceneId和sceneName的含义,这样也便于前端取数据,不然每个对象都要增加一个sessionId属性,太麻烦。

    {
      "data": {
       "sessionId":  "jksadhjksd",
       "sceneList": [
       {
         "sceneId": "NDJWKSDSJKDKED",
         "sceneName": "场景1"
       },
       {
         "sceneId": "KLJSDJKLSDFALK",
         "sceneName": "场景2"
       },
       {
         "sceneId": "KERFJKOVDJKDSS",
         "sceneName": "场景3"
       }
      ]
     }
    }

    2.实体类

    方法如下,首先创建两个实体类。

    public  class SceneVO {
      private String sessionId;
      private List sceneList;
      // 省略对应的getter和setter方法
    }
    public  class SubSceneVO {
      private String sceneId;
      private String sceneName;
      // 省略对应的getter和setter方法
    }

    3.自定义Mapper和xml文件

    public  interface BusinessScenesCustomMapper {
      SceneVO selectBySessionId(String sessionId);
    }



        
            
        
            
                
                
            
        


        
            select session_id, scene_id, scene_name
            from 表名
            where session_id = #{sessionId,jdbcType=VARCHAR}
        

    • collection标签: 用于定义关联的List集合类型的封装规则
    • property属性: 对应父类中List集合的变量名,这里SceneVO类里的List变量名为sceneList
    • ofType属性: 集合存放的类型,List集合要装的类的类名,这里是SubSceneVO

    4.Service层

    public  interface SceneService {
      /**
     * 获取场景信息
     */

      SceneVO getScenesInfo(String sessionId);
    }
    @Service
    public  class SceneServiceImpl {

      @Resource
      private BusinessScenesCustomMapper businessScenesCustomMapper;
     ......
      public SceneVO getScenesInfo(String sessionId) {
       return businessScenesCustomMapper.selectBySessionId(sessionId);
     }
    }

    5.Controller层

    ......
    @Resource
    private SceneService sceneService;

    @GetMapping( "/getScenesInfo")
    public ResModel getScenesInfo(String sessionId) {
     SceneVO sceneVO = sceneService.getScenesInfo(sessionId);
      return ResModel.ok(sceneVO);
    }
  • 相关阅读:
    【Docker】——容器数据卷
    docker部署redis集群 删除节点(缩容)
    在雷电模拟器9上安装magisk并安装LSPosed模块以及其Manager管理器(二)之LSPosed的使用
    【1day】用友U8Cloud未授权访问漏洞学习
    sklearn实现多元线性回归 【Python机器学习系列(七)】
    Clickhouse 消除由group by产生的间隙
    MVCC(Multi-Version Concurrency Control,多版本并发控制)
    【云原生】K8S包管理(helm)
    技术管理进阶——什么Leader值得追随?
    计算机毕业设计Java酒店管理系统(源码+mysql数据库+系统+lw文档)
  • 原文地址:https://blog.csdn.net/jjc4261/article/details/126686394