## **以下为报错信息**
```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);
}
#下图是实现类中的截图
错误分析:在从数据库查询数据准备赋值到数据中时,需要先做非空判断,在进行添加,不然会报“非法参数异常”