Skip to content

v1.6.1

Compare
Choose a tag to compare
@mySingleLive mySingleLive released this 29 Dec 11:13
· 8 commits to master since this release

Forest v1.6.1 版本发布了!此次版本更新主要修复了 SSE 相关问题,并新增了 SSE 拦截器。

SSE 拦截器

ForestSSE控制器和自定义SSE控制器都是非单例的独立实例对象,所以无法直接注入和使用 spring 上下文中的资源。

而 SSE 拦截器接口 SSEIntercpetor 继承自 Interceptor,可以注入到 spring 上下文中并使用其中的 bean,但和普通拦截器一样是单例,不能使用类属性共享数据。

@Component
public class MySSEInterceptor implements SSEInterceptor {
    
    @Override
    public void onSuccess(InputStream data, ForestRequest request, ForestResponse response) {
        // 和普通拦截器 onSuccess 相同,data 是 SSE 的消息流,不建议在这里动它
    }

    @Override
    public void afterExecute(ForestRequest request, ForestResponse response) {
        // 和普通拦截器 afterExecute 相同
    }

    @Override
    public void onSSEOpen(EventSource eventSource) {
        // SSE 开始监听时调用
    }

    @Override
    public void onSSEClose(ForestRequest request, ForestResponse response) {
        // SSE 结束监听时调用
    }

    
    // 监听名称为 data 的消息
    @SSEDataMessage
    public void onData(ForestRequest request, @SSEName String name, @SSEValue String value) {
        // 参数列表中的参数个数不做限制,可随意排列组合 ForestRequest、ForestResponse、EventSource 这几个类型参数
        // name: @SSEName 注解修饰的参数可传递 SSE 消息的名称
        // value: @SSEValue 注解修饰的参数可传递 SSE 消息的值
    }

    // 监听名称为 event 的消息
    @SSEEventMessage
    public void onEvent(EventSource eventSource, @SSEValue String value) {
        // 参数列表中的参数个数不做限制,可随意排列组合 ForestRequest、ForestResponse、EventSource 这几个类型参数
    }

    // 通过 @SSEMessage 注解可以指定要监听何种名称的消息
    @SSEMessage("id")
    public void onData(EventSource eventSource) {
        // 参数列表中的参数个数不做限制,可随意排列组合 ForestRequest、ForestResponse、EventSource 这几个类型参数
    }

}

绑定方式和普通拦截器一样

@Get(url = "/sse", interceptor = MySSEInterceptor.class)
ForestSSE testSSE_withInterceptor();

新增特性

  • feat: SSE 拦截器

修复问题

  • fix: @SSEName 注解参数取值错误
  • fix: SSE 请求长连接超时
  • fix: SSE 请求返回的控制器为单例的问题

代码改动

  • update: SSE 适配 spring-boot 和 solon