cje*_*rik 5 javascript java spring server-sent-events spring-boot
我已经为我的 spring-boot 应用程序实现了一个端点,它返回一个服务器发送的事件,我多次向该事件发送一个简单的字符串。当对此端点发出请求时,它被打开,然后发生错误。我发送的字符串似乎没有到达前端。
这是控制器:
@RequestMapping("/sseTest")
@Async
public ResponseBodyEmitter handleRequest() {
final SseEmitter emitter = new SseEmitter();
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(() -> {
for (int i = 0; i < 500; i++) {
try {
emitter.send(123 , MediaType.TEXT_PLAIN);
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
emitter.completeWithError(e);
return;
}
}
emitter.complete();
});
return emitter;
}
Run Code Online (Sandbox Code Playgroud)
以及处理请求的前端代码:
const eventSource = new EventSource('http://localhost:8080/sseTest');
eventSource.onopen = e => console.log('open');
eventSource.onerror = e => {
if (e.readyState == EventSource.CLOSED) {
console.log('close');
} else {
console.log(e);
}
};
eventSource.onmessage = event => {
console.log(event.data);
};
Run Code Online (Sandbox Code Playgroud)
控制台记录以下内容:
open
Event {type: "error"}
Run Code Online (Sandbox Code Playgroud)
事件已打开,但随后立即报告错误。
小智 1
我有类似的问题。我创建了一个自定义过滤器,因此它会要求添加异步支持。
自定义过滤器 -
@WebFilter(urlPatterns="/*")
@Component
public class SessionFilter implements Filter {
Run Code Online (Sandbox Code Playgroud)
它弹出的错误是 -
java.lang.IllegalStateException:必须在 servlet 上以及异步请求处理中涉及的所有过滤器上启用异步支持。这是使用 Servlet API 在 Java 代码中完成的,或者通过向 web.xml 中的 servlet 和过滤器声明添加“true”来完成。
我删除了自定义过滤器。它就像一个魅力。
| 归档时间: |
|
| 查看次数: |
723 次 |
| 最近记录: |