List 集合,如何优雅地返回给前端?
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"
}
}
}
}
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变量名为sceneListofType属性:集合存放的类型,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);
}
万兴科技发布AI视频创作软件Wondershare Filmora13
万兴科技发布了AI视频创作软件WondershareFilmora13。该软件内置了创作助手Copilot,用户可以AI助手对话获取创作建议指导。Copilot还提供了一键助力功能,可以快速完成剪辑创作,简化视频创作流程,提高创作效率。站长网2023-10-31 14:17:550000报告:超 70% 公司正在尝试生成式AI,但很少愿意投入更多支出
根据国外科技媒体VentureBeat的调查结果显示,超过一半的组织(54.6%)正在尝试使用生成式人工智能(generativeAI),而少数组织(18.2%)已经将其实施到运营中。然而,只有少数组织预计会在未来一年内在这项技术上投入更多资金。站长网2023-07-26 11:43:280000昆仑万维:AIGC、人工智能等业务尚未产生实际收入
今日,昆仑万维表示,目前公司AIGC、人工智能等业务产品尚未产生实际收入,预计对公司2023年财务状况不会产生较大贡献。AIGC技术需要持续大规模资金的投入,投资回报慢,如果公司继续加大投入,预计还会对公司2023年财务状况产生负面影响。站长网2023-04-26 16:46:1300003550万美元A轮融资,Praktika携手AI虚拟导师打造沉浸式英语学习课堂
大多数语言学习应用通过选择选项或滑动卡片进行互动,用户或多或少是在与机器互动。然而,Praktika则采用了不同的方法:它让用户创建个性化的AI虚拟形象,模拟真人面授导师的课堂体验,利用语音语调和情感,使语言学习更加自然。Sense思考我们尝试基于文章内容,提出更多发散性的推演和深思,欢迎交流。站长网2024-06-08 12:44:000001何恺明新作再战AI生成:入职MIT后首次带队,奥赛双料金牌得主邓明扬参与
何恺明入职MIT副教授后,首次带队的新作来了!让自回归模型抛弃矢量量化,使用连续值生成图像。并借鉴扩散模型的思想,提出DiffusionLoss。他加入MIT后,此前也参与过另外几篇CV方向的论文,不过都是和MIT教授WojciechMatusik团队等合作的。这次何恺明自己带队,参与者中还出现一个熟悉的名字:邓明扬,IMO、IOI双料奥赛金牌得主,在竞赛圈人称“乖神”。站长网2024-06-24 14:20:130000