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);
}
《纽约时报》可能起诉 OpenAI,可能改变 AI 行业格局
本文概要:1.《纽约时报》考虑起诉OpenAI,因为ChatGPT可能与报纸的内容竞争。2.双方就许可协议进行多次谈判,未能达成一致。3.诉讼结果可能对整个人工智能行业产生深远影响,需要寻找新的训练数据、重新训练模型。根据媒体报道,《纽约时报》正在考虑对OpenAI提起诉讼,该诉讼的结果可能会对人工智能行业产生持久影响。站长网2023-08-19 13:07:140000贾跃亭谈苹果放弃造车 称苹果放弃造车是大错误
站长之家(ChinaZ.com)2月29日消息:今日下午,法拉第未来创始人贾跃亭针对苹果公司放弃造车项目发表长文,表达了自己的失望和看法。贾跃亭认为,尽管库克成功地守护了乔布斯留下的iPhone帝国,但在AI电动出行领域,他并未展现出与伟大创始人相匹配的远见和魄力。站长网2024-02-29 15:23:020000全球大型网站正在阻止 OpenAI 等人工智能爬虫访问其内容
根据人工智能内容检测器Originality.AI的最新数据,全球前1000个网站中有近20%阻止爬虫机器人收集网络数据用于AI服务。在缺乏明确法律或监管规定管理AI使用版权材料的情况下,大小不一的网站都自行采取措施。站长网2023-09-03 09:13:190002英伟达的江山,还能坐多久?
当下的AI赛场上,英伟达无疑是最闪耀的一颗明星。十多年来,英伟达在生产能够执行复杂AI任务(如图像、面部和语音识别)的芯片方面,建立了几乎无法撼动的领先地位。然而,凡事总有变化。近期,随着谷歌、IBM等巨头开始在芯片方面一齐发力,GPU领域的竞争格局,开始有了些微妙的改变。最近,IBM推出一款全新的14nm模拟AI芯片,效率达到了最领先GPU的14倍。站长网2023-09-05 16:39:340000首个人体动捕基模型SMPLer-X面世 可捕捉身体甚至面部动作
要点:1.首次提出了动捕大模型SMPLer-X,用来进行人体全身姿态与体型估计,通过训练450万个实例,在七个关键榜单上取得最佳性能。2.SMPLer-X不仅能够捕捉身体动作,还可以输出面部和手部动作,并估计体型。3.该研究探索了数据缩放与模型缩放,对32个学术数据集进行排名,展示了在各种测试和榜单中的强大性能。站长网2023-10-30 15:04:270001