【发布时间】:2019-08-10 02:55:02
【问题描述】:
我的应用程序是一个带有多个端点的 Spring Boot 应用程序。我们正在尝试使用 Webflux 添加启用 SSE 的端点。
用例:
第 1 步:前端向 POST 端点提交请求并获取唯一 ID。
第 2 步:前端使用 GET 端点获取处理后的结果(启用 SSE - Flux)
Angular 使用 EventSource 对象来使用 SSE 端点。它需要端点来生成文本/事件流。它适用于积极的测试用例。但是当服务抛出运行时异常时,Angular 前端无法获取 HTTP 状态代码和异常详细信息。它只是没有数据的错误。
抛出的异常:
@ResponseStatus(code = HttpStatus.NOT_FOUND)
public class RequestNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
public RequestNotFoundException(String message) {
super(message);
}
}
如this 中所述,返回Flux<ServerSentEvent> 并使用自定义事件终止通量:
Java 端点
@GetMapping(path= "{id}/async", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<Optional<ProcessedResult>>> getProcessedResultStream(
@PathVariable("id") @ApiParam(value = "The unique identifier of the request", required = true) String id)
throws InterruptedException {
// Combining data and adding a disconnect event to handle at the frontend.
return Flux.concat(
Flux.just(ServerSentEvent.<Optional<ProcessedResult>>builder(service.getProcessedResult(id))
.build()),
Flux.just(ServerSentEvent.<Optional<ProcessedResult>>builder().event("disconnect").build()));
}
这有助于通过断开连接来关闭 UI 端的连接。但我的主要问题仍然悬而未决。我应该如何将错误消息传播回前端?所有其他(正常)端点使用上面给出的正确 HTTP 代码抛出自定义运行时异常。
我是否应该更改我的 ProcessedResult 类以获取异常详细信息?
【问题讨论】:
标签: java angular spring-boot spring-webflux server-sent-events