1. 程式人生 > 其它 >VO資料封裝死活封裝不進去?

VO資料封裝死活封裝不進去?

業務詳情:小視訊業務。接受資料涉及 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半天,還找不到錯,我吐了~