当前位置: 首页 > 知识库问答 >
问题:

在进行通量处理时,如何正确抛出异常?

厉坚
2023-03-14

我拥有的现有代码:

private Flux<Integer> testGetFluxTestData() {
    return Flux.just(new TestData(1), new TestData(2))
            .collectList()
            .map(list -> list.stream()
                    .map(TestData::getId)
                    .collect(Collectors.toList()))
            .flatMapMany(Flux::fromIterable);
}

我想丰富现有代码,并在收到一些不允许的数据时引发异常,我做了以下更改:

    private Flux<Integer> testGetFluxTestData2() {
        return Flux.just(new TestData(1), new TestData(2))
                .collectList()
                .map(list -> {
                    return !list.contains(new TestData(1)) ?
                            list.stream()
                                    .map(TestData::getId)
                                    .collect(Collectors.toList()) :
                            Flux.error(new IllegalTestDataException("illegal test data 1"));
                })
                .flatMapMany(Flux::fromIterable);
    }

但由于以下原因,我的实现甚至不可编译:

Flux.error(new IllegalTestDataException("illegal test data 1"));

您能为我的特定场景提供建议吗?

共有1个答案

钱季
2023-03-14

您正在尝试从列表中map

(旁注:即使您在一个平面映射中,它也不起作用,因为此时由于集合列表,您在一个API中,所以平面映射期望函数得到一个结果)。

请注意,map操作符捕捉lambda中的异常,并将其转换为一个错误信号,因此从技术上讲,您可以替换通量。错误,抛出。

否则,您需要将映射转化为平面映射和通量。错误变成单声道。错误,原因如上所述。

 类似资料:
  • 我有下面的代码块。我得到的是的catch块没有处理它。有人能告诉我如何处理下面的块抛出的异常吗?

  • 我试图了解gRPC中的异常处理机制是如何工作的。 除了try-catch块之外,还有其他方法来处理运行时异常,例如服务器端的IllegalArgumentException吗? 例如,我有一些gRPC流式客户端服务,当传递的参数不满足深层次的一些断言时(在某些库中,例如,com.google.common.base.Preconditions),方法onNext抛出IllegalArgumentE

  • 问题内容: 我有一个使用FreeMarker作为View技术的Spring MVC应用程序(但是也许对我的问题来说,视图技术并不重要)。我需要拦截在请求期间可能引发的所有异常。 我已经实现了HandlerExceptionResolver,但是仅当控制器中发生异常时才执行此解析器。但是,当控制器返回ModelAndView且呈现视图时发生异常(因为未找到变量或类似的东西),则不调用异常解析器,而是

  • 我正在使用Spring4和Tomcat。问题是有时我不得不在我的筛选器中抛出一个(自定义的)RuntimeException(控件甚至还没有到达控制器)。问题是,由于我没有抛出tomcat理解的异常,它被转换为500(内部服务器错误)。我相信403禁止会比500好(对于我的定制例外)。我查看了和注释。但只有当控件到达控制器时,这些才起作用。 到目前为止,我在筛选器的中将状态手动设置为403。有没有

  • 虽然已经在响应拦截器里做了一些全局处理,最后是通过 Promise.reject 抛出的异常 现在每个接口请求方法都还是得写 try/catch 或者 .catch() 真的好麻烦 有什么比较好的方案吗?

  • 我使用PowerMock(Mockito)模拟同一类中另一个方法的子调用。更具体地说,我有这样的东西: 现在在我的单元测试中,我能够使用间谍模拟MyMethod2的响应,并做一些类似。但是,当我做这样的事情时,会发生一些奇怪的事情:。当我在测试期间调用myClass.myMethod1()时,它会抛出一个NullPointerException,但奇怪的是,如果我使用调试器并检查,e是MyExce