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

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

点击关注#互联网架构师公众号,领取架构师全套资料 都在这里01c9cfe9f1b29b89977d75e26c2603a6.png

0、2T架构师学习资料干货分

上一篇:SQL优化 21 连击 + 思维导图

大家好,我是互联网架构师!

  • 1.业务背景

  • 2.实体类

  • 3.自定义Mapper和xml文件

  • 4.Service层

  • 5.Controller层

33610ac03494b053fd39376001b79113.jpeg


1.业务背景

业务场景中,一个会话中存在多个场景,即一个session_id对应多个scene_idscene_name。另外,搜索公众号互联网架构师后台回复“9”,获取一份惊喜礼包。

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

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

返回的List<SceneVO>形式如下,这个数据在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<SubSceneVO> sceneList; // 省略对应的getter和setter方法}public class SubSceneVO { private String sceneId; private String sceneName; // 省略对应的getter和setter方法}

3.自定义Mapper和xml文件

public interface BusinessScenesCustomMapper { SceneVO selectBySessionId(String sessionId);}<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="你的包名.mapper.BusinessScenesCustomMapper">    <resultMap id="BaseResultMap" type="你的包名.vo.SceneVO">        <result column="session_id" jdbcType="VARCHAR" property="sessionId"/>    <!--      collection 标签:用于定义关联的list集合类型的封装规则      property:对应父类中list属性名,这里SceneVO类里的List变量名为sceneList      ofType:集合存放的类型,List集合要装的类的类名,这里是SubSceneVO    -->        <collection property="sceneList" ofType="你的包名.vo.SubSceneVO">            <result column="scene_id" jdbcType="VARCHAR" property="sceneId"/>            <result column="scene_name" jdbcType="VARCHAR" property="sceneName"/>        </collection>    </resultMap><!-- 一个session_id对应多条记录,返回的是SceneVO对象,SceneVO对象有一个List装着SubSceneVO  -->    <select id="selectBySessionId" parameterType="string" resultMap="BaseResultMap">        select session_id, scene_id, scene_name        from 表名        where session_id = #{sessionId,jdbcType=VARCHAR}    </select></mapper>
  • collection标签: 用于定义关联的List集合类型的封装规则

  • property属性: 对应父类中List集合的变量名,这里SceneVO类里的List变量名为sceneList

  • ofType属性: 集合存放的类型,List集合要装的类的类名,这里是SubSceneVO

4.Service层

public interface SceneService { /** * 获取场景信息 */ SceneVO getScenesInfo(String sessionId);}@Servicepublic class SceneServiceImpl { @Resource private BusinessScenesCustomMapper businessScenesCustomMapper; ...... public SceneVO getScenesInfo(String sessionId) {  return businessScenesCustomMapper.selectBySessionId(sessionId); }}

5.Controller层

......@Resourceprivate SceneService sceneService;@GetMapping("/getScenesInfo")public ResModel getScenesInfo(String sessionId) { SceneVO sceneVO = sceneService.getScenesInfo(sessionId); return ResModel.ok(sceneVO);}

欢迎大家进行观点的探讨和碰撞,各抒己见。如果你有疑问,也可以找我沟通和交流。

来源:liuchenyang0515.blog.csdn.net/article/details/118159196

相关阅读:

1、Alibaba开源内网高并发编程手册.pdf

2、2T架构师学习资料干货分享

3、10000+TB 资源,阿里云盘,牛逼!!

4、基本涵盖了Spring所有核心知识点总结

  · END ·

最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全。

06a4f623a0aa1b2b6285435b404b05b6.png

如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。

求一键三连:点赞、转发、在看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值