v1.6.1
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