• List 对象集合,如何优雅地返回给前端?


    08c105d02f5764a67f1676236e49d291.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);
    }
  • 相关阅读:
    特征工程(六)—(2)利用LDA进行特征转换
    经过一个多月的等待我有幸成为Spring相关项目的Contributor
    Python的推导式与三目运算符
    adb-环境安装
    数据库的进阶增删查改操作(一)
    C++中的继承
    李开复和马斯克加入AGI大模型大战 零一万物和Grok有哪些特点
    AI作画使用指南
    如何做好银行统一报送系统UI设计
    随笔 | 写在九月末的这一天
  • 原文地址:https://blog.csdn.net/chenxuyuana/article/details/126686395