【问题标题】:Serialize Map<String, Map<String, String>>序列化 Map<String, Map<String, String>>
【发布时间】:2021-08-31 20:37:05
【问题描述】:

所以我有一个使用 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')"

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

【问题讨论】:

标签: kotlin spring-webflux project-reactor jackson-databind webflux


【解决方案1】:

您的回复看起来不像 Map&lt;String, Map&lt;String, String&gt;&gt; ,而是看起来像 List&lt;Map&lt;String , String&gt;&gt; ,您可以将代码更新为

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

【讨论】:

  • nope.. 它实际上是 Map> (我可以在 swagger 中看到定义并且只读代码..)我只是无法更改它的实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
相关资源
最近更新 更多