我在尝试处理调用Spring WebFlux的web客户机的不同错误时遇到了麻烦。
return request
.bodyToMono(InputMessage::class.java)
.flatMap { inputMessage ->
client
.get()
.uri { builder ->
builder.path("/message")
.queryParam("message", inputMessage.message)
.build()
}
.retrieve()
.onStatus({t: HttpStatus -> t.is5xxServerError}, {c: ClientResponse -> Mono.error(Throwable("Internal Server Error - try again later"))})
.bodyToMono(ListOfAddresses::class.java)
}
.flatMap { s -> ServerResponse.ok().syncBody(s) }
return request
.bodyToMono(InputMessage::class.java)
.flatMap { inputMessage ->
client
.get()
.uri { builder ->
builder.path("/message")
.queryParam("message", inputMessage.message)
.build()
}
.retrieve()
.onStatus({t: HttpStatus -> t.is5xxServerError}, {c: ClientResponse -> Mono.error(Throwable("Internal Server Error - try again later"))})
.bodyToMono(ListOfAddresses::class.java)
}
.flatMap { s -> ServerResponse.ok().syncBody(s) }
.onErrorResume { e -> Mono.just("Error " + e.message)
.flatMap { s -> ServerResponse.ok().syncBody(s) } }
我如何修改我的代码,使它返回我生成的自定义消息?
根据WebFlux文档,您可以使用exchangeTomono()
或awaitexchange{}
进行错误处理。
Mono<Object> entityMono = client.get()
.uri("/persons/1")
.accept(MediaType.APPLICATION_JSON)
.exchangeToMono(response -> {
if (response.statusCode().equals(HttpStatus.OK)) {
return response.bodyToMono(Person.class);
}
else if (response.statusCode().is4xxClientError()) {
// Suppress error status code
return response.bodyToMono(ErrorContainer.class);
}
else {
// Turn to error
return response.createException().flatMap(Mono::error);
}
});
从上面的WebFlux链接复制的代码。
我想在以下条件下抛出自定义异常: > 如果我得到了json格式的正确错误响应,我想反序列化它,并在onStatus()中抛出名为CommonException的异常 如果作为响应的一部分接收HTML内容或反序列化未成功执行,则我希望抛出GenericeException,这是我在onErrorMap()中创建的 在抛出GenericException时,我希望将从下游响应获得的相同HttpStat
我们使用和作为Spring 5.1.9的一部分,使用方法发出请求。此方法的文档强调了以下内容: ...使用exchange()时,应用程序有责任使用任何响应内容,而不管场景如何(成功、错误、意外数据等)。不这样做会导致内存泄漏。 如果我理解实现,那么如果请求被成功调度,将始终给我们一个响应,而不管响应代码是什么(例如4xx、5xx)。在这个场景中,我们只需要调用来使用响应。我关心的是错误场景(例如
我是一个穿Spring靴的新手,我需要你的帮助。 我使用WebClient发出GET请求,我收到一个JSON正文,如下所示: 所以我有一个DTO类,其中映射响应。类似于这样: 我使用以下方法: 最后,我用这种方法进行了测试: 在响应具有KO状态之前一切正常。如果出现问题(即坏请求),我会收到相同的正文JSON结构,如下所示: 有没有办法在我的DTO类上也用KO状态映射JSON主体?我想返回retr
我有一个spring webclient对外部服务进行http调用,并得到反应式断路器工厂(resilience4J impl)的支持。当客户端建立连接并响应失败(任何内部服务器或4XX错误)时,WebClient和断路器的行为符合预期。但是,如果客户端无法建立连接,无论是连接被拒绝还是未知主机,它都会开始崩溃。 我似乎无法在webClient中捕获错误消息并触发断路器。 断路器永远不会打开并抛出
我已经在如下所示的过滤器中实现了错误处理: 如果响应带有一个主体,那么< code > response . bodytomono(string . class ),这样做应该没问题。平面地图(...)被执行。然而当身体是空的时候,什么都不会发生,但是我想要的是也处理错误。我的理解是,我会这样做: 这不起作用,因为预期返回的类型是Mono而不是Mono。 我如何在有响应体和无响应体的情况下实现对错
我是webflux的新手,无法找到正确的材料来继续实现。 null