我在做一个项目,到目前为止一直在使用 org.springframework.web.client.RestTemplate
我最近了解到,这个类将被弃用,取而代之的是异步 org.springframework.web.reactive.function.client.WebClient
框架。现在我非常赞成这一点,因为我的应用程序在等待restemplate(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()
没有达到我的期望
当我使用restemplate时,有一种方法可以用该模板注册序列化程序(尽管这对于我来说不是必需的) JsonObject
),这对webclient也是必要的吗?如果是,你怎么做?
我将非常感激你的帮助。
谢谢
账单
n、 b.我不确定这是否有任何关联,但我正在访问的rest端点确实有ip限制,因此如果以某种方式 WebClient
如果要更改起始ip,这可能会产生一些影响。虽然我认为这更像是 4**
某种程度上,我没有看到这些!或者可能是一个媒体类型的问题,因为它是通过一个dmz,在那里卫报可能会改变一个'未经授权'的请求从 application/json
至 text/*
例如。
另一点可能与此相关,即要成功启动应用程序,必须使用以下属性运行它: spring.main.web-application-type=none
更新
我现在有我的应用程序运行,虽然不是我想要的!
这个问题似乎是由需要我使用的团队pom(作为父pom)导入的可传递依赖项。我现在成功地开始了这个项目。但是仍然发现json对象(现在是jackson)仍然是空的(正如 object.isEmpty()
).
我的依赖项/版本现在是: org.springframework:5.2.8.RELEASE
org.springframework.boot:2.3.3.RELEASE com.fasterxml.jackson:2.11.2
我知道我在和一个家长pom做斗争,这和我想做的是相反的,但是我想知道我真正需要的依赖是什么
暂无答案!
目前还没有任何答案,快来回答吧!