首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将错误消息从SSE (Webflux) Spring Boot应用程序传递到Angular 7前端

将错误消息从SSE (Webflux) Spring Boot应用程序传递到Angular 7前端
EN

Stack Overflow用户
提问于 2019-03-19 22:30:07
回答 1查看 1.1K关注 0票数 7

我的应用程序是一个有几个端点的Spring Boot应用程序。我们正在尝试使用Webflux添加启用SSE的终结点。

使用案例:

步骤1:前端向POST端点提交请求,获取唯一ID。

第2步:前端使用GET端点获取处理结果(启用SSE- Flux)

Angular使用EventSource对象来使用SSE端点。它需要端点来生成文本/事件流。它对于积极的测试用例非常有效。但是当服务抛出运行时异常时,Angular前端无法获取HTTP状态码和异常详细信息。它只是没有数据的错误。

抛出异常:

代码语言:javascript
复制
@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端点

代码语言:javascript
复制
 @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类以获取异常详细信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-23 05:42:08

服务器端事件使用开放的HTTP连接来流式传输来自服务器的内容。根据Eventsource HTTP200 OK响应的W3C规范,建立连接需要正确的Content-Type报头,HTTP 500, 502, 503, 504或任何其他网络错误都会导致浏览器重新建立连接。如果以上情况都不满足,则使用readyState = 'CLOSED'触发错误事件。简而言之,onError回调仅用于处理网络超时或访问控制问题。

不可能基于运行时异常发送不同的HTTP状态码,因为您在建立连接时已经发送了200OK。处理运行时错误的唯一方法是捕获异常,并从服务器发送一个自定义命名事件,然后基于该事件close EvetSource

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55243391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档