gpt4 book ai didi

java - 如何捕获阻塞 webclient GET 请求的 onStatus 方法中引发的异常?

转载 作者:太空宇宙 更新时间:2023-11-04 09:28:12 24 4
gpt4 key购买 nike

我现在使用 WebClient 而不是其余模板来调用 API。我们的目标是,在不久的将来的冲刺中,我们将使所有客户端都具有响应性和非阻塞性,但在短期内,我们可以使用阻塞调用,但至少要有 WebClient。我们想做的一件事是在返回 204 No Content 状态时抛出自定义异常,以便使用客户端的代码必须捕获该异常

我尝试从 .onStatus(...) 中抛出异常,但发生的情况是,它不会从下面的代码中抛出 PersonNotFoundException ,而是抛出一个 reactor.core.Exceptions$ReactiveException ,其中 PersonNotFoundException 嵌套

客户端代码

public PersonDto getPersonDetails(String lastName) throws PersonNotFoundException{
return webClient.get()
.uri(personEndpoint + "/{lastName}", lastName)
.retrieve()
.onStatus(status -> status.equals(HttpStatus.NO_CONTENT),
clientResponse -> Mono.error(new PersonNotFoundException("Person " + lastName + "Not Found")))
.bodyToMono(PersonDto.class)
.block();
}

调用代码

 PersonDto personDto = null;
try {
personDto = personServiceCLient.getPersonDetails("Smith");
} catch (PersonNotFoundException e) {
//do custom logic for 204 errors
}

我希望的结果是 PersonNotFoundException 将在调用代码的 catch 语句中被捕获。结果是抛出 ReactiveException,未捕获的异常终止了我的程序:

reactor.core.Exceptions$ReactiveException: com.sample.demo.PersonNotFoundException: Person Smith Not Found
at reactor.core.Exceptions.propagate(Exceptions.java:326) ~[reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:91) ~[reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
at reactor.core.publisher.Mono.block(Mono.java:1494) ~[reactor-core-3.2.6.RELEASE.jar:3.2.6.RELEASE]
at com.sample.demo.client.PersonServiceClient.getPersonDetails(PersonServiceClient.java.java:45) ~[classes/:na]
at com.sample.demo.PersonServiceImpl.addPersonToHousehold(PersonServiceImpl.java:120) ~[classes/:na]

最佳答案

您的自定义异常PersonNotFoundException被包装到reactor.core.Exceptions$ReactiveException中。为了避免这种情况,请始终使用RuntimeException。现在您必须从 RuntimeException 扩展自定义异常类。

例如:

public class PersonNotFoundException extends RuntimeException

关于java - 如何捕获阻塞 webclient GET 请求的 onStatus 方法中引发的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57430097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com