java实现上一篇下一篇功能

本文介绍了一种基于文章类型的导航优化方案,通过自定义实体Dto,实现了上一篇、下一篇的文章链接功能。具体方法是在服务层根据当前文章ID,查询相同类型的文章列表,并确定当前文章在列表中的位置,从而获取其前后文章的ID和标题。

在这里插入图片描述
根据文章类型查询,实现上一篇、下一篇的效果

  1. 自定义实体Dto(这里只放出扩展字段)
@Getter
@Setter
public class OsArticleDto extends BaseDto {
	/**  */
	private static final long serialVersionUID = 1L;
	/*
	 * 上一篇文章id
	 */
	private String beforeId;
	/**
	 * 上一篇文章标题
	 */
	private String beforeTitle;
	/**
	 * 下一篇文章id
	 */
	private String afterId;
	/**
	 * 下一篇文章标题
	 */
	private String afterTitle;

}
  1. service层实现
public OsArticleDto getAfter(String id) {
		OsArticleDto articleOld = getById(id);
		OsArticle articleNew = new OsArticle();
		// 设置查询条件
		articleNew.setType(articleOld.getType());
		articleNew.setStatus(articleOld.getStatus());
		// 根据当前文章类型查询相关文章
		List<OsArticleDto> list = osArticleMapper.getPageList(articleNew);
		// list长度减一(索引值从0开始)
		int count = list.size() - 1;
		list.forEach(a -> {
			if (a.getId().equals(articleOld.getId())) {
				// 当前文章所在索引位置
				int index = list.indexOf(a);
				// 索引为0时且list长度大于0,直接获取索引下一个值
				if (index == 0 && count > 0) {
					articleOld.setAfterId(list.get(1).getId());
					articleOld.setAfterTitle(list.get(1).getArticleTitle());
					// 索引为最后一个且list长度大于0,,赋值上一篇文章
				} else if (index == count && count > 0) {
					articleOld.setBeforeId(list.get(index - 1).getId());
					articleOld.setBeforeTitle(list.get(index - 1).getArticleTitle());
				} else {
					// 索引为中间值时,分别给上下文章赋值
					articleOld.setBeforeId(list.get(index - 1).getId());
					articleOld.setBeforeTitle(list.get(index - 1).getArticleTitle());
					articleOld.setAfterId(list.get(index + 1).getId());
					articleOld.setAfterTitle(list.get(index + 1).getArticleTitle());
				}
			}
		});
		return articleOld;
	}
  1. Controller层,此方法为根据id查询详情时向前台提供的接口。
@GetMapping(value = "/getById", produces = "application/json;charset=UTF-8")
	public BaseResult<?> getById(@RequestParam("id") String id) {
		try {
			OsArticleDto dto = oArticleService.getAfter(id);
			return getBaseResultSuccess(dto, "获取信息成功");
		} catch (BusinessException e) {
			return getBaseResultFail(null, e.getCode(), e.getMessage());
		} catch (Exception e) {
			log.error("获取信息失败" + e + "######################");
			return getBaseResultFail(null, ErrorCode.HANDLER_EXCEPTION, "系统繁忙,请稍后再试");
		}
	}

  1. 代码有待优化,希望各位多提意见,谢谢。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值