CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

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

  • 1.业务背景
  • 2.实体类
  • 3.自定义Mapper和xml文件
  • 4.Service层
  • 5.Controller层
图片[1]-面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。-丞旭猿

1.业务背景

业务场景中,一个会话中存在多个场景,即一个session_id对应多个scene_idscene_name。另外,搜索公众号顶级科技后台回复“API接口”,获取一份惊喜礼包。

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

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);}<?xml  version="1.0" encoding="UTF-8"?>mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">"你的包名.mapper.BusinessScenesCustomMapper">    "BaseResultMap" type="你的包名.vo.SceneVO">        "session_id" jdbcType="VARCHAR" property="sessionId"/>            "sceneList" ofType="你的包名.vo.SubSceneVO">            "scene_id" jdbcType="VARCHAR" property="sceneId"/>            "scene_name" jdbcType="VARCHAR" property="sceneName"/>                "selectBySessionId" parameterType="string" resultMap="BaseResultMap">        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);}@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);}

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容