本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ❤️

发布文章实现

发布文章的后端接口在 ArticleConsole.java 中:

  • 请求路径:/console/article
  • HTTP 方法:POST
  • Java 方法:ArticleConsole#addArticle

方法参数 requestJSONObject 是 Latke 框架自动注入的,只要类型是 JSONObject 并且命名为 requestJSONObject 的 Processing 方法,框架都会将浏览器客户端提到的数据解析并转换成 JSON 格式后通过该参数进行实参注入。

后端没有进行严格的参数校验,因为博客后台只有文章作者自己用,只要控制好权限就行,并不会出现被攻击带来的问题。

ArticleConsole 控制器中获取当前登录用户作为文章作者,然后调用文章管理服务 ArticleMgmtService 实现发布文章:

final JSONObject currentUser = Solos.getCurrentUser(request, response);
requestJSONObject.getJSONObject(Article.ARTICLE).put(Article.ARTICLE_AUTHOR_ID, currentUser.getString(Keys.OBJECT_ID));

final String articleId = articleMgmtService.addArticle(requestJSONObject);
ret.put(Keys.OBJECT_ID, articleId);
ret.put(Keys.MSG, langPropsService.get("addSuccLabel"));
ret.put(Keys.STATUS_CODE, true);

renderer.setJSONObject(ret);

发布文章大致需要进行如下处理:

  • 填充默认值,比如评论 / 浏览计数等
  • 填充参数值,比如文章标题、内容、日期等
  • 处理标签关联
  • 处理统计,比如用户文章计数、全站文章计数

文章发布完成后还需要触发事件发布文章。事件主要用于提供一种扩展机制,让我们可以在不修改核心业务逻辑的前提下完成一些其他功能。比如发布文章后同步社区就是通过事件机制完成的,具体事件处理器在 B3ArticleSender.java 中实现。

关于文章首图

但找配图是一件令人抓狂的事情,为了解决这个痛点我们做了 bing 这个小工具,通过它每天抓取 Bing 的“今日美图”并放到了七牛云 CDN 上供 Solo、Pipe 等应用使用。不过稍有遗憾的是配图没有进行归类,“图不对文”的情况只能靠用户自己解决了,大多数情况下这些图片作为文章首图还是没多大问题的。


回到全文目录:《Solo 从设计到实现》

感谢    关注    收藏    赞同    反对    举报    分享