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

  本篇文章为你整理了面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。()的详细内容,包含有 面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。,希望能帮助你了解 面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。。

  分享Java技术,高并发编程,分布式技术,架构设计,Java面试题,算法,行业动态,程序人生等。

  
1.业务背景

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

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

  

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"

  

 

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

  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);

  @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);

  

 

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

  近期热文推荐:

  1.1,000+ 道 Java面试题及答案整理(2022最新版)

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

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

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

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

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

  以上就是面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。()的详细内容,想要了解更多 面试官:有一个 List 对象集合,如何优雅地返回给前端?我懵了。。的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: