ele*_*ode 4 java dictionary webclient consuming spring-webflux
首先,我有一个像这样公开的 REST URL:
@PostMapping("/check/existence")
@ResponseBody
public Map<String, MyObjectDto> checkExistence() {
//some code
Run Code Online (Sandbox Code Playgroud)
然后,我有一个带有 Spring WebClient 的消费者,如下所示:
ClientResponse response = webclient.post().uri....
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
Map<String, MyObjectDto> responseDto =
response.bodyToMono(Map.class).block();
Run Code Online (Sandbox Code Playgroud)
但控制台返回给我
java.util.LinkedHashMap cannot be cast to org.mypackage.MyObjectDto
Run Code Online (Sandbox Code Playgroud)
那么,我如何使用类似这样的地图Map<String, MyObjectDto>?
从类的文档中ParameterizedTypeReference<T>
此类的目的是捕获和传递通用类型。为了捕获泛型类型并在运行时保留它,您需要创建一个子类(最好是匿名内联类),如下所示:
当您需要将某些内容序列化/反序列化为使用泛型的类型时(例如 Map<k, v> 或 List)
你不能使用
response.bodyToMono(Map.class)
Run Code Online (Sandbox Code Playgroud)
这样一来,spring 就不知道你想要实际放入 Map 中的类型了。你要输入一个 int 吗?一个字符串?一个东西?它不知道。
因此,您需要提供包含类型信息的内容。
bodyToMono(new ParameterizedTypeReference<Map<String, MyObjectDto>>() {})
Run Code Online (Sandbox Code Playgroud)
ParameterizedTypeReference是一个匿名类,将为您保存您的类型信息。因此,当我们将类型信息传递给通用函数 bodyToMono 时,该类就像一个容器来保存类型信息,这样 spring 就可以查看该对象的内容并找出您想要使用的类型。
| 归档时间: |
|
| 查看次数: |
4146 次 |
| 最近记录: |