我是靠谱客的博主 虚拟帽子,这篇文章主要介绍面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。,现在分享给大家,希望可以做个参考。

1.业务背景

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

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

复制代码
1
2
3
4
5
6
public class SceneVO { private String sessionId; private String sceneId; private String sceneName; // 省略对应的getter和setter方法 }

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{ "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属性,太麻烦。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{ "data": { "sessionId": "jksadhjksd", "sceneList": [ { "sceneId":"NDJWKSDSJKDKED", "sceneName":"场景1" }, { "sceneId":"KLJSDJKLSDFALK", "sceneName":"场景2" }, { "sceneId":"KERFJKOVDJKDSS", "sceneName":"场景3" } ] } }

Java 集合系列文章:https://www.javastack.cn/categories/Java/

2.实体类

方法如下:

首先创建两个实体类

复制代码
1
2
3
4
5
6
7
8
9
10
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文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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层

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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层

复制代码
1
2
3
4
5
6
7
8
9
...... @Resource private 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.1,000+ 道 Java面试题及答案整理(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

最后

以上就是虚拟帽子最近收集整理的关于面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。的全部内容,更多相关面试官:有一个内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部