0

我正在做一个项目,直到现在一直在使用org.springframework.web.client.RestTemplate 我最近了解到这个类将被弃用以支持异步 org.springframework.web.reactive.function.client.WebClient框架。现在我非常赞成这一点,因为我的应用程序在等待来自 RestTemplate (GET) 调用的响应时遇到了长时间的延迟(此时我可能正在做数据库的事情)。
我现在遇到的问题是,如果我拨打如下电话:

final Mono<String> call = webClient
        .get()
        .uri("/base/recordPath/1?format=json")
        .header("Content-Type", MediaType.APPLICATION_JSON_VALUE)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToMono(String.class)

当我进行后续调用时:
System.out.println(call.block());
我得到了预期的输出(填充的 Json 对象的字符串版本)。
但是,如果我将之前的调用更改为(我想做的!):

final Mono<JsonObject> call = webClient
        .get()
        .uri("/base/recordPath/1?format=json")
        .header("Content-Type", MediaType.APPLICATION_JSON_VALUE)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToMono(JsonObject.class)

当我这样做时:
System.out.println(call.block());
我只是得到{}而不是填充的 JsonObject

所以看起来bodyToMono()没有完成“我”的预期

当我使用 RestTemplate 时,有一种方法可以使用模板注册序列化程序(尽管这不是必需的JsonObject),这对 WebClient 也有必要吗?如果是这样,你怎么做?
我将不胜感激。

谢谢

账单

注意我不确定这是否有任何相关性,但我正在访问的其余端点确实有 IP 限制,所以如果以某种方式WebClient更改原始 IP,这可能会产生一些影响。虽然我本以为它会更像4**某种东西,但我没有看到任何这些!或者可能是媒体类型问题,因为它正在通过 DMZ,例如,监护人可能会将“未经授权的”请求从application/json更改text/*为。

可能相关的另一点是,要成功启动应用程序,必须使用以下属性运行它: spring.main.web-application-type=none

更新
我现在可以运行我的应用程序,尽管不是我想要的!
问题似乎是我需要使用的团队 pom 导入的传递依赖项(作为父 pom)。我现在成功启动了该项目。但仍然发现 json 对象(现在是杰克逊)仍然是空的(如 所报告的object.isEmpty())。
我现在的依赖项/版本是:
org.springframework:5.2.8.RELEASE
org.springframework.boot:2.3.3.RELEASE
com.fasterxml.jackson:2.11.2
我知道我正在与父 pom 作斗争,这与我正在尝试做的事情相反,但想知道我真正需要的依赖项是什么

4

0 回答 0