0

所以我有一个带有 webflux 的 GET 请求,如下所示:

suspend fun getProperties(): Map<String, Map<String, String>> {
        return webClient
            .get()
            .uri("/property/all")
            .retrieve()
            .bodyToMono(object : ParameterizedTypeReference<Map<String, Map<String, String>>>() {})
            .awaitSingle()
    }

要接收的架构如下所示:

{
  "additionalProp1": {
    "additionalProp1": "string",
    "additionalProp2": "string",
    "additionalProp3": "string"
  },
  "additionalProp2": {
    "additionalProp1": "string",
    "additionalProp2": "string",
    "additionalProp3": "string"
  },
  "additionalProp3": {
    "additionalProp1": "string",
    "additionalProp2": "string",
    "additionalProp3": "string"
  }
}

当调用被触发时,我收到一个错误:

"JSON encoding error: class java.util.LinkedHashMap cannot be cast to class java.lang.String (java.util.LinkedHashMap and java.lang.String are in module java.base of loader 'bootstrap'); nested exception is com.fasterxml.jackson.databind.JsonMappingException: class java.util.LinkedHashMap cannot be cast to class java.lang.String (java.util.LinkedHashMap and java.lang.String are in module java.base of loader 'bootstrap')"

如何正确编写嵌套地图的自定义序列化?

4

1 回答 1

0

您的响应看起来不像Map<String, Map<String, String>>,而是看起来像List<Map<String , String>>,您可以将代码更新为

suspend fun getProperties(): Map<String, Map<String, String>> {
        return webClient
            .get()
            .uri("/property/all")
            .retrieve()
            .bodyToMono(object : ParameterizedTypeReference<List<Map<String , String>>>() {})
            .awaitSingle()
    }
于 2021-09-01T04:16:23.600 回答