![](/img/trans.png)
[英]How to deserialize a ClientResponse body in Spring test environment?
[英]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.