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);
}
日本电信巨头 NTT 将推出面向商业用途的「tsuzumi」的新 AI 模型:日语能力超越 ChatGPT
日本电信巨头NipponTelegraphandTelephone(NTT)宣布将于三月推出面向商业用途的生成式人工智能(AI)平台,以在迅速扩张的市场中追赶国际竞争对手。据NTT本月早些时候透露,该AI平台的日语处理能力超过了美国OpenAI开发的广泛使用的AI聊天机器人ChatGPT。图源备注:图片由AI生成,图片授权服务商Midjourney站长网2023-11-24 09:35:180000AI视频剪辑工具GhostCut 支持智能去文字、视频去重、语音翻译等
鬼手剪辑是一款专业的视频剪辑工具,旨在帮助创作者、商家和MCN机构制作精彩的本土化视频营销。无论您是想去除视频中的字幕,还是需要将视频翻译成其他语言,鬼手剪辑都能高效地满足您的需求。体验地址:https://jollytoday.com/index/cn站长网2023-09-12 18:19:340003UiPath:人工智能驱动的自动化提高了近 60% 员工的工作满意度
根据自动化软件公司UiPath近期进行的一项调查,大多数员工(约60%)相信以人工智能为基础的自动化解决方案可以减轻职业倦怠,并显著提高工作满意度。此外,57%的受访者对整合业务自动化以支持员工和简化运营的雇主表示了比不这样做的雇主更积极的看法,反映了他们对此类做法的积极态度。站长网2023-05-22 09:48:420000荣耀X60系列10月16日发布:前代销量超1500万台
荣耀品牌宣布,荣耀X60系列智能手机将于10月16日晚上7点30分正式亮相。根据之前的信息,荣耀X60系列预计将推出至少三款不同配置的机型,并且有35W和66W两种快速充电技术可供选择。除了快充技术,新款手机预计还将保留并进一步升级前代产品的一些特点,如双曲面屏幕、更强的抗摔性能以及超长的电池续航能力。0000不就是开个淘宝店嘛?店搭子、AI都来了
1前段时间有个非常魔幻的新闻,说三个人想创业,合伙开了个汉堡店,结果日营业额才79块钱。大家仔细感受一下这个数字。如果说一天只有几百块营业额,可以叫做生意不好。但只有79块的话,这已经不是好不好做了,楼下支个摊卖淀粉肠都比这个强了。但仔细看了报道,事情顿时又合理了。这三个人的履历一个比一个离谱,一个之前是做商场销售的,另一个是开饰品店的。还剩下最后一个,你以为能靠点谱了吧?站长网2023-05-01 10:19:340000