Skip to content

v1.6.4

Latest
Compare
Choose a tag to compare
@mySingleLive mySingleLive released this 26 Feb 00:28
· 3 commits to master since this release

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);

或者使用AUTOlisten方法不传参数的情况下,默认为AUTOAUTO模式会自动识别需要采用的行模式

// 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)等方法签名,造成错误