ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

VO数据封装死活封装不进去?

2021-08-22 18:04:04  阅读:206  来源: 互联网

标签:videoVoList 封装 videoVo 死活 VO video userInfo 属性


业务详情:小视频业务。接受数据涉及 video表 (存于mongoDB); userInfo表(存于MySQL)

前端接收数据:一个pagebean,一个小视频VO (封装video表全部数据和userInfo表部分数据)

问题详情:小视频VO数据封装全部失败,或部分失败

问题分析:

  1 首先 属性名一定要一致  如下代码中:videoVo中的存在的属性,userInfo中一定要有,属性要名字相同,才能被赋值,否则需手动赋值

  2 关注数据类型转换问题  如下代码中: 因为video表存于MongoDB,其id为object类型 封装到videoVo中需要转为string类型  

数据封装详细代码:

    //查询小视频 使用@Cacheable返回值必须实现序列化
    @Cacheable(value = "video")//redis数据缓存 默认从redis里取,没有数据会查询数据库
    public PageBeanVo smallVideos(Integer page, Integer pagesize) {

        log.debug("正在执行VideoService smallVideos方法");

        // 分页查询video数据--mongo
        PageBeanVo pageBean = videoApi.findVideo(page, pagesize);

        // 查询userInfo数据
        List<Video> items = (List<Video>) pageBean.getItems();
        List<VideoVo> videoVoList = new ArrayList<>();

        if (CollectionUtil.isNotEmpty(items)) {
            for (Video video : items) {
                UserInfo userInfo = userInfoApi.findUserInfo(video.getUserId());

                // 封装app需要vo
                VideoVo videoVo = new VideoVo();
                //封装userInfo属性到videoVo
                //copyProperties(userInfo,videoVo)videoVo中的存在的属性,userInfo中一定要有,属性要名字相同,才能被赋值,否则需手动赋值
                BeanUtils.copyProperties(userInfo, videoVo);
                //手动封装userInfo的id
                videoVo.setUserId(userInfo.getId());

                //封装video属性到videoVo
                BeanUtils.copyProperties(video, videoVo);//copyProperties(video,videoVo)videoVo中的存在的属性,video中一定要有
                //手动封装视频id
                videoVo.setId(video.getId().toString());//object转string
                //videoVo.setId(video.getVid().toString());
                //手动封装视频封面
                videoVo.setCover(video.getPicUrl());
                //手动封装视频说明
                videoVo.setSignature(video.getText());
                //设置是否点赞 默认不点赞
                videoVo.setHasLiked(0);

                if (stringRedisTemplate.hasKey(StrUtil.format("follow_user_{}_{}", UserHolder.getUser().getId(), video.getUserId()))) {
                    videoVo.setHasFocus(1); //是否关注
                } else {
                    videoVo.setHasFocus(0); //是否关注
                }
                videoVo.setHasLiked(0); //是否点赞
                videoVoList.add(videoVo);
            }
        }

        log.debug("videoVoList: "+videoVoList);

        // 返回pageBean
        pageBean.setItems(videoVoList);
        return pageBean;

解决方案1:属性名不一致,单独封装属性

解决结果:失败

解决方案2:数据类型不一致,转换数据类型封装

解决结果:失败

解决方案3: 检查导入的BeanUtils工具类包是否正确:

import org.apache.commons.beanutils.BeanUtils;
(艹皿艹 )又导错包了
导入:
import org.springframework.beans.BeanUtils;
解决结果:成功

总结:包导错什么的也太烦人了,一个alt+enter不注意,就要debug半天,还找不到错,我吐了~

标签:videoVoList,封装,videoVo,死活,VO,video,userInfo,属性
来源: https://www.cnblogs.com/axibug/p/15172965.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有