java.lang.IllegalArgumentException: Source must not be null

## **以下为报错信息**
```java
java.lang.IllegalArgumentException: Source must not be null
	at org.springframework.util.Assert.notNull(Assert.java:198) ~[spring-core-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.beans.BeanUtils.copyProperties(BeanUtils.java:656) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.beans.BeanUtils.copyProperties(BeanUtils.java:602) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]



**======================================================**
## controller部分

```java
## controller部分
@RestController
@RequestMapping("/movements")
public class MovementsController {

    @Autowired
    private MovementsService movementsService;
## service部分
 /**
     * 接口名称:好友动态
     * 需求描述:查询好友动态,就是查看“朋友圈”。在自己的时间线表中存储了所有好友的动态
     */
    public ResponseEntity<Object> queryPublishList(Integer page, Integer pageSize) {
        // 1.获取登陆用户id
        Long userId = UserHolder.getUserId();
        // 2.分页查询好友动态(自己的时间线表)
        PageResult pageResult = publishApi.findByTimeLine(page,pageSize,userId);
        List<Publish> publishList = (List<Publish>) pageResult.getItems();

        // 3.封装返回的结果MovementsVo集合
        // 3.1 创建返回结果
        List<MovementsVo> voList = new ArrayList<>();
        // 3.2 遍历查询的发布动态集合
        if (publishList!=null) {
            for (Publish publish : publishList) {
                // 3.2.1 创建vo对象
                MovementsVo vo = new MovementsVo();
                // 3.2.2 封装数据:发布动态
                BeanUtils.copyProperties(publish, vo);
                // 3.2.3 封装数据:先查询用户详情,再封装
                UserInfo userInfo = userInfoApi.findById(publish.getUserId());
                if (userInfo != null) {
                    BeanUtils.copyProperties(userInfo, vo);
                    if (userInfo.getTags() != null) {
                        vo.setTags(userInfo.getTags().split(","));
                    }
                }
                // 3.2.3 封装数据:其他参数
                vo.setId(publish.getId().toString());
                if (publish.getMedias() != null) {
                    vo.setImageContent(publish.getMedias().toArray(new String[]{}));
                }
                vo.setDistance("50米");
                vo.setCreateDate(RelativeDateFormat.format(new Date(publish.getCreated())));
                vo.setHasLiked(0);
                vo.setHasLoved(0);

                // 3.2.4 对象添加到集合
                voList.add(vo);
            }
        }

        // 4.在把封装好的vo集合设置到分页对象中
        pageResult.setItems(voList);
        return ResponseEntity.ok(pageResult);
    }

## 实现类部分

```java
 /**
     * 接口名称:好友动态
     * 需求描述:查询好友动态,就是查看“朋友圈”。在自己的时间线表中存储了所有好友的动态
     *
     * @param page
     * @param pageSize
     * @param userId
     */
    @Override
    public PageResult findByTimeLine(Integer page, Integer pageSize, Long userId) {
        // 1.查询时间线表
        Query query = new Query();
        query.with(Sort.by(Sort.Direction.DESC, "created"));
        query.limit(pageSize).skip((page - 1) * pageSize);

        List<TimeLine> timeLineList = mongoTemplate.find(query, TimeLine.class, "quanzi_time_line_" + userId);
        long count = mongoTemplate.count(query, TimeLine.class, "quanzi_time_line_" + userId);

        // 2.返回发布动态的集合(因为在service要封装MovementsVo,而movementsVo需要获取发布数据)
        List<Publish> publishList = new ArrayList<>();
        if (timeLineList != null) {
            for (TimeLine timeLine : timeLineList) {
                if (timeLine.getPublishId() != null) {
                    // 根据发布动态id查询
                    Publish publish = mongoTemplate.findById(timeLine.getPublishId(), Publish.class);
                    if (publish != null) {
                        // 添加到集合
                        publishList.add(publish);
                    }
                }
            }
        }
        // 3.创建分页对象、封装结果并返回
        return new PageResult(page, pageSize, (int) count, publishList);
    }

#下图是实现类中的截图
在这里插入图片描述
错误分析:在从数据库查询数据准备赋值到数据中时,需要先做非空判断,在进行添加,不然会报“非法参数异常”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值