Forest v1.6.3 版本发布了!此次版本更新主要调整了 SSE 消息处理方面的接口
SSE 消息行模式
SSE 的消息通常为标准的多行一组的name:value
格式,每组消息用空白行隔开,具体如下:
id:1
event:json
data:{"name":"a"}
text:xxx
id:2
event:json
data:{"name":"b"}
text:yyy
对于这种标准的格式,可使用多行(MULTI_LINES),或自动(AUTO)模式
Forest.get("/sse")
.sse()
.setOnMessage(event -> {
event.id(); // 消息名为 id 的值,这里应得到 1, 2
event.event(); // json
event.data(); // {"name": "a"}, ...
event.value("text"); // 获取非标准名称的消息值,如: text,这里应得到 xxx, yyy
})
.listen(SSELinesMode.MULTI_LINES);
或者使用AUTO
,listen
方法不传参数的情况下,默认为AUTO
,AUTO
模式会自动识别需要采用的行模式
// AUTO 模式会自动识别需要采用的行模式
sse.listen(); // 默认行模式为 AUTO
SSE 的消息除了有标准格式,还有很多非标准的格式,比如每行都是一条JSON字符串,每一行都是单独的消息
{"name":"a"}
{"name":"b"}
{"name":"c"}
对于这种类型的消息,就要使用单行模式(SINGLE_LINE)
Forest.get("/sse")
.sse()
.setOnMessage(event -> {
String str = event.value(); // 获取字符串类型的消息值
MyUser user = event.value(MyUser.class); // 获取消息值并转换为自定义类型
})
.listen(SSELinesMode.SINGLE_LINE);
新增特性
- feat: 添加根据类型获取body对象的接口,可通过
request.body().get(Class)
获得body中对应类型的对象 - feat: 支持指定 SSE 消息行模式,包括单行、多行、以及自动模式
修复问题
- fix: 由Content-Type中
; charest=utf8
部分包含空格导致的body无故乱码的问题 - fix: 和老版本forest冲突时,新版本Forest类缺乏get(url)、post(url)等方法签名,造成错误