业务场景中,一个会话中存在多个场景,即一个session_id
对应多个scene_id
和scene_name
如果你写成如下的聚合模型类
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" } ] }}
方法如下:
首先创建两个实体类
public class SceneVO { private String sessionId; private ListsceneList; // 省略对应的getter和setter方法}public class SubSceneVO { private String sceneId; private String sceneName; // 省略对应的getter和setter方法}
public interface BusinessScenesCustomMapper { SceneVO selectBySessionId(String sessionId); }
collection标签: 用于定义关联的List集合类型的封装规则
property属性: 对应父类中List集合的变量名,这里SceneVO类里的List变量名为sceneList
ofType属性: 集合存放的类型,List集合要装的类的类名,这里是SubSceneVO
public interface SceneService { /** * 获取场景信息 */ SceneVO getScenesInfo(String sessionId); }@Servicepublic class SceneServiceImpl { @Resource private BusinessScenesCustomMapper businessScenesCustomMapper; ...... public SceneVO getScenesInfo(String sessionId) { return businessScenesCustomMapper.selectBySessionId(sessionId); } }
......@Resourceprivate SceneService sceneService;@GetMapping("/getScenesInfo")public ResModel getScenesInfo(String sessionId) { SceneVO sceneVO = sceneService.getScenesInfo(sessionId); return ResModel.ok(sceneVO); }