内容简介:1. ActFramework 1.8.32 ActFramework 是一款高质量的 Java Web 应用框架. 最新的 1.8.32 版本带来了 20 项错误修复和更新. 其中值得关注的有: 1.1 通过 HTTP 访问 CLI 命令 #1305 熟悉 Act 的用户都知道在 Act ...
1. ActFramework 1.8.32
ActFramework 是一款高质量的 Java Web 应用框架. 最新的 1.8.32 版本带来了 20 项错误修复和更新. 其中值得关注的有:
1.1 通过 HTTP 访问 CLI 命令 #1305
熟悉 Act 的用户都知道在 Act 提供了大量的内置 CLI 命令, 也提供了非常方便的 CLI 命令创建机制. 如果需要在后端创建一个用户, 只需写出这样的代码即可:
@PropertySpec("id")
@Command(name = "user.create", help = "create user")
public User create(
@Required("specify user email") String email,
@Required("specify user password") char[] password,
@Optional("specify user role") Role role
) {
User user = findByEmail(email);
badRequestIf(null != user, "email[%s] registered already", email);
user = new User(email);
user.setPassword(password);
user.role = null == role ? Role.SUPER_USER : Role.RESTRICTED_USER;
return save(user);
}
使用这个命令则需要在后台通过 telnet 或者 nc 等 工具 访问服务器的 CLI 服务端口:
这个机制非常方便但在开发时链接 CLI 服务端口会有个问题, 就是服务器在代码更新触发热加载的时候断开 TCP 链接, 因此调试命令需要重新连上 CLI 服务端口, 有点小麻烦. 在 1.8.32 中我们带来了方便的 CLI Over Http 服务机制, 让开发人员仅在开发时通过 /~/cmd
来访问命令:
这样开发人员无需在后台不停链接 CLI 端口即可随时通过 HTTP 网页来调试 CLI 命令.
1.2 增强 SampleData API, 允许在创建 List/Set 的时候指定创建 Mock 数据的数量 #1301
ActFramework 的 SampleData 提供了强大的 Mock 数据生成 API, 在这个版本中我们进一步增强了这个特性, 可以指定创建 Mock 数据的条目了.
示例代码:
public static class User {
public String firstName;
public String lastName;
public String email;
}
@GetAction("users/mock")
public List<User> test() {
return SampleData.generateList(User.class, 7);
}
测试:
1.3 从浏览器直接访问返回 Iterable 类型数据的端点, 自动以 HTML table 形式生成响应 #1298
这个增强的结果在上面已经显示出来了. 以前的版本从浏览器访问直接数据返回端点都是以 JSON 形式显示结果的. 看官可能会提问题了, 如果我通过 ajax 形式访问数据端点也会拿到 HTML table 形式的响应吗? 答案是在 ajax 请求中设定好 Accept=application/json
ActFramework 会以 JSON 形式发回数据的. 拿刚刚上面的例子来测试:
较真的看官可能又要问了, 如果我就想在浏览器中看 JSON 数据而不是 HTML table 数据怎么办. 这个也不是问题, 使用 _accept=json
请求参数即可:
1.4 HTML-Table 增强 - 表头始终处于页面顶部
1.5 IStorageService 对错误处理的增强 #1295
以前当 IStorageService 发生存储项目未找到, 或者访问受限的错误, 都会导致发出 500 服务器错响应. 现在 ActFramework 能更好地处理这些错误情况, 当发生资源未找到时, 会处理为 404 响应. 访问受限会处理为 403 响应.
1.6 异步结果处理增强 - 使用最初指定的 Content-Type 来生成异步处理结果 #1286
在 ActFramework 中如果有工作是耗时较长的, 比如某些数据报表生成, 可以采用异步处理方式.
示例代码:
@Async
@ReportProgress
@GetAction("/users/async")
public List<User> simulateLongTimeOperation(ProgressGauge gauge) {
final int sz = 100;
List<User\> userList = new ArrayList<>(sz);
gauge.updateMaxHint(sz);
for (int i = 0; i < sz; ++i) {
$.sleep(50);
userList.add(SampleData.generate(User.class));
}
return userList;
}
访问该接口:
以前的版本无论用那种请求类型访问最后都只能看到上面的结果 - JSON 形式生成的响应. 在这个版本里我们缓存了最初的请求响应类型, 并在最后生成结果响应的时候应用请求的响应类型. 下面是演示:
用 html-table 方式访问 /users/async
:
用 xlsx 方式访问 /users/async
:
2. Act-Beetl 1.7.2
更新 beetl 至 3.0.19.RELEASE
3. Act-BeetlSQL 1.8.2
更新 beetlsql 至 2.12.20.RELEASE
4. Act-Morphia 1.9.0
Act-morphia 是转为 ActFramework 应用程序设计的 MongoDB 访问库. v1.9.0 带来的改进有:
4.1 Dao.update API 改进:
下面的情况如果 firstName
为 null
, 则会调用 mongodb 的 $unset 操作删掉 firstName 字段:
4.2 加载 Entity 的时候自动初始化集合类型字段
假设你有下面的 Model 类型:
@Entity("emp")
public class Employee extends MorphiaModel<Employee> {
public String firstName;
public String lastName;
public List<AuditRecord> auditRecords;
}
从数据库中 load 一个 Employee 实例, 假设该记录没有 auditRecords
数据, 以前该字段会是 null
, 现在则自动将 auditRecords
字段设置为空 List
. 这样做的好处是避免对 auditRecord
字段进行操作的时候还需要进行空值检查.
5. Act-Excel 1.9.0, Act-Excel-java7 1.9.0
5.1 支持不同的输出主题
示例代码:
默认主题:
春意盎然:
五十度灰:
金秋:
5.2 提供帮助方法让应用自己控制 Excel 文档生成
群里有人提出需要定时生成 Excel 文档, 不希望还需要从 HTTP 走一遍, 于是将内部的逻辑抽取出来提供了下面的静态方法方便 程序员 使用:
ExcelDirectRender.generateExcelFile(Object data, File targetFile);
6. OSGL-Tool 1.24.0
osgl-tool 是一套 Java 工具库, ActFramework 中大量使用了 osgl-tool 来简化开发. v1.24.0 版本带来一下改变:
6.1 UserAgent
使用 LFU Cache 来替代 HashMap #234
UserAgent 字串解析是一件耗时的工作. 因此我们总是希望将结果缓存下来. 以前的版本采用简单的 HashMap 来缓存 UserAgent 解析结果. 这个速度当然很快, 然而带来的麻烦是 UserAgent 的种类基本上是一个开发的数量, 根据 whatismybrowser 的统计, 有超过 2400 万的不同的 UserAgent 字串. 随着时间的推移, HashMap 的 UserAgent 缓存将吃光服务器上的堆空间.
这个版本中我们使用了 LFU (最低访问次数) 缓存来存储 1000 个 UserAgent 解析结果, 这样大多数常用的 UserAgent 会被缓存起来, 既满足了性能的要求, 也不会对服务器堆空间带来长期的压力.
6.2 Crypto
增加 RSA 方法 #233
在 Crypto
工具类上增加 RSA 的方法:
public static KeyPair generateKeyPair();
public static KeyPair generateKeyPair(int keysize);
public static String encryptRSA(String value, byte[] publicKey);
public static String encryptRSA(String value, String urlSafeBase64EncodedPublicKey);
public static String decryptRSA(String value, byte[] privateKey);
public static String decryptRSA(String value, String urlSafeBase64EncodedPrivateKey);
6.3 UserAgent
- 支持 Microsoft Edge #230
6.4 添加 S.acronym(CharSequence)
静态方法
String a = S.acronym("OpenSourceGeneralLibrary"); // a = 'OSGL'
7. 总结
以上就是本次更新中值得关注的部分. 最后给自己的博客做一个友情链接, 请大家观赏一下 如何用不到 70 行 Java 代码撸一个简单的文件上传服务
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- ActFramework 1.9.1 发布 - 高质量的 Java Web 应用框架
- 对高质量数据的追求
- 如何写出高质量的技术文章?
- 编写高质量Python程序(三)基础语法
- 机器学习高质量数据集大合辑
- 做到这些细节,就是高质量C代码!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。