『博客开发日记』之归档接口的实现

本文最后更新于 2026年4月18日 晚上

归档接口的实现


归档接口的需求

要按分页需求

要按年月来进行分类

代码实现

创建ArchiveController添加相关接口方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//归档接口
@RestController
@RequestMapping("/archive")
@Api(tags = "归档", description = "归档相关接口")
public class ArchiveController
{
@Autowired
private ArchiveService archiveService;

/**
* 获取归档列表(按年月分组)
*/
@SystemLog(businessName = "查询归档列表")
@GetMapping("/getArchiveList")
@ApiOperation(value = "归档列表", notes = "获取归档列表(按年月分组)")
public ResponseResult getArchiveList() {
return archiveService.getArchiveList();
}
}

创建ArchiveServiceImpl类,实现业务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@Service
public class ArchiveServiceImpl implements ArchiveService
{

@Autowired
private ArticleMapper articleMapper;

@Override
public ResponseResult getArchiveList()
{
// 查询所有已发布的文章,按创建时间倒序
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Article::getStatus, SystemConstants.ARTICLE_STATUS_NORMAL)
.eq(Article::getDelFlag, SystemConstants.NOT_DELETED)
.orderByDesc(Article::getCreateTime);

List<Article> articles = articleMapper.selectList(queryWrapper);

// 按年月分组
Map<String, List<Article>> groupedArticles = articles.stream()
.collect(Collectors.groupingBy(article -> {
Calendar calendar = Calendar.getInstance();
calendar.setTime(article.getCreateTime());
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
return year + "-" + month;
}, LinkedHashMap::new, Collectors.toList()));

// 转换为 ArchiveVo
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<ArchiveVo> archiveVos = groupedArticles.entrySet().stream()
.map(entry -> {
String[] yearMonth = entry.getKey().split("-");
Integer year = Integer.parseInt(yearMonth[0]);
Integer month = Integer.parseInt(yearMonth[1]);

List<ArchiveArticleVo> articleVos = entry.getValue().stream()
.map(article -> new ArchiveArticleVo(
article.getId(),
article.getTitle(),
sdf.format(article.getCreateTime())
))
.collect(Collectors.toList());

return new ArchiveVo(year, month, articleVos.size(), articleVos);
})
.collect(Collectors.toList());

return ResponseResult.okResult(archiveVos);
}
}

创建ArchiveArticleVo



PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记』之归档接口的实现
http://example.com/2026/02/10/『博客开发日记』之归档接口的实现/
作者
云梦泽
发布于
2026年2月10日
更新于
2026年4月18日
许可协议