本文是《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 等应用使用。不过稍有遗憾的是配图没有进行归类,“图不对文”的情况只能靠用户自己解决了,大多数情况下这些图片作为文章首图还是没多大问题的。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于