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


    eca50cceb7ab980f005cb96befad562c.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);
    }
  • 相关阅读:
    Debian11安装Proxmox VE 7
    ARouter 面试题
    【Wifi认证 攻击】
    【C++】C++入门
    专访阿里云 RocketMQ 团队:现代微服务架构需要新的消息系统
    Java高并发编程实战3,Java内存模型与Java对象结构
    EXCEL里数值列如何显示序号?如何重新排序? 怎么取得排序后的序号?
    Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021)
    html自定义大屏6宫格9宫格12宫格多宫格替换合并,jquery实现自定义大屏宫格替换
    java基于微信小程序的驾校预约管理系统+ssm+uinapp+Mysql+计算机毕业设计
  • 原文地址:https://blog.csdn.net/m0_70748381/article/details/126686393