簡體   English   中英

如何使用 Spring ClientResponse 使用 Map?

[英]how to consume a Map with Spring ClientResponse?

拳頭,我有一個這樣暴露的 REST 網址:

   @PostMapping("/check/existence")
   @ResponseBody
   public Map<String, MyObjectDto> checkExistence() {
   //some code 

然后,我有一個帶有 Spring WebClient 的消費者,如下所示:

   ClientResponse response = webclient.post().uri....

我想做這樣的事情:

   Map<String, MyObjectDto> responseDto = 
   response.bodyToMono(Map.class).block();

但控制台返回給我

   java.util.LinkedHashMap cannot be cast to  org.mypackage.MyObjectDto

那么,我如何使用像 Map<String, MyObjectDto> 這樣類型的地圖?

來自ParameterizedTypeReference<T>類的文檔

此類的目的是啟用捕獲和傳遞泛型類型。 為了捕獲泛型類型並在運行時保留它,您需要創建一個子類(最好是匿名內聯類),如下所示:

當您需要將某些內容序列化/反序列化為使用泛型的類型時(例如 Map<k, v> 或 List)

你不能使用

response.bodyToMono(Map.class)

由於這種方式,spring 不知道您要實際放入 Map 的類型。 你要輸入一個int嗎? 一個字符串? 一個東西? 它不知道。

因此,您需要提供包含類型信息的內容。

bodyToMono(new ParameterizedTypeReference<Map<String, MyObjectDto>>() {})

ParameterizedTypeReference是一個匿名類,它將為您保存類型信息。 因此,當我們將類型信息傳遞給泛型函數 bodyToMono 時,該類就像一個容器來保存您的類型信息,這樣 spring 就可以查看此對象的內容並找出您想要使用的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM