问题描述
我正在研究一个项目,直到现在一直在使用org.springframework.web.client.RestTemplate
我最近了解到,不推荐使用此类,而推荐使用 Asynch org.springframework.web.reactive.function.client.WebClient
框架。
现在,我非常支持此操作,因为我的应用程序在等待
RestTemplate(GET)调用的响应(此时我可以做数据库内容 etc。)。
我现在遇到的问题是,如果我像这样拨打电话:
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对象的String版本)。
但是,如果我将先前的呼叫更改为(我想这样做!):
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时,有一种方法可以向Template注册序列化程序(尽管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对抗,这与正在尝试做的事情相反,但我想知道我真正需要的依赖项是什么
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)