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

使用spring-boot webflux处理错误消息

雍志新
2023-03-14

我正在编写一个java适配器,用于向WebService发布一些内容。在http服务中,我使用一个ExceptionHandler:

@org.springframework.web.bind.annotation.ExceptionHandler 
public ResponseEntity<String> handle(BadCommandException ex) {
  return ResponseEntity.badRequest().body(ex.getMessage());
}

如果我用卷曲/邮递员来称呼的话,那很管用。

private Mono<Optional<String>> post(String bearerToken, Model model, IRI outbox) {
    return WebClient.builder()
        .build()
        .post()
        .uri(outbox.stringValue())
        .contentType(new MediaType("text","turtle"))
        .body(BodyInserters.fromValue(modelToTurtleString(model)))              
        .header("Authorization", "Bearer " + bearerToken)
        .header("profile", "https://www.w3.org/ns/activitystreams")
        .accept(new MediaType("text", "turtle"))
        .retrieve()         
        .toEntity(String.class)
        .map(res->res.getHeaders().get("Location").stream().findFirst());
}

在成功的情况下,我希望从location头返回字符串。但是,例如,如果http-status为400,我如何抛出异常,并将正文中的错误消息添加到异常中呢?

谢谢

共有1个答案

越安翔
2023-03-14

webclient retreive()的spring文档提供了如何处理错误的示例。我建议你从那里开始。

Mono<Person> result = client.get()
        .uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .onStatus(HttpStatus::is4xxClientError, response -> ...)
        .onStatus(HttpStatus::is5xxServerError, response -> ...)
        .bodyToMono(Person.class);
 类似资料:
  • 通过对错误类型实现 Display 和 From,我们能够利用上绝大部分标准库错误处理工具。然而,我们遗漏了一个功能:轻松 Box 我们错误类型的能力。 标准库会自动通过 Form 将任意实现了 Error trait 的类型转换成 trait 对象 Box<Error> 的类型(原文:The std library automatically converts any type that imp

  • 我尝试在使用邮件时进行以下错误处理: 如果出现序列化错误:在DLT中发送消息 我拥有的(2.5.1Kafka客户端的Spring kafka 2.5.5版本)如下: 现在,如果我发送不可序列化的消息,我的消息将不重试地发送到DLT- 在我的中,我有一个,捕获并重新捕获。 我应该没有重试,但我得到了2个重试,每个20秒(而不是10秒?),并在2次重试后向DLT发送了一条消息。 如果我删除errorH

  • 问题内容: 我正在使用Spring + Redis作为新项目中的缓存组件。spring config xml文件是: 用法是 我的测试用例是: 如果Redis服务器正在运行,则代码正在正确运行。但是我的问题是,如果我关闭Redis服务器,它将抛出异常: 我想问一下客户端是否无法连接Redis Server,为什么会抛出异常?我们可以配置这样的方案吗?-如果缓存层(Redis Server)无法连接

  • 在happy path场景中,我有一个spring批处理工作,但现在我将重点放在错误处理上。 但是,在另一个测试中,我想证明一个不可预见的数据库错误会导致作业失败。为此,我创建了一个触发器,该触发器会导致对要插入的表的插入失败。 这似乎起作用了,在writer执行之后,在事务提交期间抛出异常,并且我得到以下日志消息: 这似乎也是预期的行为。问题是,这并不能阻止工作。该步骤退出到SimplyRetr

  • 如果没有抛出异常,那么一切都按照我希望的方式工作。 当前,如果从该函数引发异常,我会得到以下异常: