WebClient 块抛出 nullPointerException

Sar*_*oev 6 spring spring-boot spring-webflux

我有以下代码从另一个服务获取用户详细信息。

ParameterizedTypeReference<SuccessResponse<<User>> userTypeReference = new ParameterizedTypeReference<>() {}

User user = webClient.get()
                .uri("url")
                .retrieve()
                .onStatus(HttpStatus::is4xxClientError, response -> Mono.empty())
                .bodyToMono(userTypeReference)
                .onErrorResume(e -> Mono.empty())
                .doOnError(e -> logger.error("Error on fetching user details {}", e))
                .map(response -> response.getData())
                .block();
Run Code Online (Sandbox Code Playgroud)

该服务的响应如下所示:

{
  "status": "success",
  "data": {
      "name": "John",
      ...
  }
}
Run Code Online (Sandbox Code Playgroud)

如果data元素不可用,映射将返回 null 并抛出block()错误java.lang.NullPointerException: The mapper returned a null value

我知道我们可以nullPointerException在映射期间处理并返回new User对象(如果数据对象为空)。但我不想得到一个空的对象。有什么方法可以使用 来获取空值吗block()

Bri*_*zel 2

反应式流规范(订阅者,规则 13)禁止null元素,而这正是您的操作员正在做的事情:当您的响应的数据部分中没有提供用户时,map它会返回值。null

response.getData()您应该在块操作之后调用,并对null那里的值做出反应。