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

返回错误会更改方法签名

缪坚诚
2023-03-14

我从教程中感觉到,返回一个可丢弃的,不应该改变方法返回类型。

以下是我的尝试:

  1. 使用句柄时,一切都很好,直到我添加. timeout(),然后函数返回类型更改为Flux
private Flux<String> exampleHandle()
{
    MutableHttpRequest<String> req = HttpRequest.GET("http://localhost:8080");

    return httpClient.exchange(req, TokenResponse.class)
        .handle((response, sink) -> {
            Optional<TokenResponse> optionalBody = response.getBody();
            if (optionalBody.isEmpty()) {
                sink.error(new InitializationException("Failed to fetch authentication token. Body is null."));
            } else {
                TokenResponse tokenResponse = optionalBody.get();
                String accessToken = tokenResponse.getAccessToken();
                if (accessToken != null) {
                    sink.next(accessToken);
                } else {
                    sink.error(new InitializationException("Failed to fetch authentication token. Authentication token is null."));
                }
            }
        });
       // .timeout(Duration.ofSeconds(10)); // Timeout changes return type to Flux<Object>
}
private Flux<String> exampleMap()
{
    MutableHttpRequest<String> req = HttpRequest.GET("http://localhost:8080");

    return httpClient.exchange(req, TokenResponse.class)
        .map(response -> {
            Optional<TokenResponse> optionalBody = response.getBody();
            if (optionalBody.isEmpty()) {
                return Flux.error(new InitializationException("Failed to fetch authentication token. Body is null."));
            } else {
                TokenResponse tokenResponse = optionalBody.get();
                String accessToken = tokenResponse.getAccessToken();
                if (accessToken != null) {
                    return accessToken;
                } else {
                    return Flux.error(new InitializationException("Failed to fetch authentication token. Authentication token is null."));
                }
            }
        });
}

能不能找个更有知识的人解释一下我做错了什么?非常感谢。


共有1个答案

呼延凌
2023-03-14

您应该在句柄之前移动超时

 return httpClient.exchange(req, TokenResponse.class)
        .timeout(Duration.ofSeconds(10))
        .handle((response, sink) -> {

至于map案例,看一下方法签名:

通量映射(函数

map使用函数

有用的链接:

  • 使用Retor抛出异常的正确方法
  • 地图vs反应器中的平面图

 类似资料:
  • 我正在尝试使用具有唯一约束“phone\u number\u key”的jooq和table实现save或update方法 我的代码: 但我得到了例外 错误:重复的键值违反唯一约束“phone_number_key”详细信息:key(“phoneNumber”)=(99999999)已存在。 我使用“.onDuplicateKeyUpdate()”方法时遇到了相同的错误 我使用postgres d

  • 攺变方法的名称,攺函数的可访问性,对参数进行添加、删除、重命名和重新排序。 操作步骤: 菜单栏: Refactor --> Change Signature 快捷键: Mac: fn+ command + F6

  • 问题内容: 我有一个存储过程,如下所示: 我遇到的问题是,该站点本月没有任何事件,因此当我运行此proc时,我为该站点返回了NULL值,但是我需要返回零/ 0以便在内部使用SSRS中的图表。 我曾尝试使用合并和isull无济于事。 有没有一种方法可以正确格式化此格式? 干杯, 背风处 问题答案: 放在外面: 如果要返回多行,请将INNER JOIN更改为 LEFT JOIN 顺便说一句,如果没有保

  • 从问题的答案中,我可以理解FXMLDocumentController可以作为参数传递,但我不确定如何在通过javascript回调访问控制器时访问它。

  • 我正在获取功能的帖子的特色图像 之前它获取了正确的图像,但我在wordpress媒体设置中将媒体大小从300更改为400,并重新生成了所有图像。显示并生成大小为400的图像。但现在它继续获取300分辨率的图像,而不是400分辨率的图像。 如何修复此问题并使其获取400大小的图像?

  • 我是JS的学生。我有一段代码返回了一个错误。 这是返回的语法错误。你们能解释一下我做错了什么吗?