【问题标题】:How to serialize Map<String, Map<MetricName, ? extends Metric>> to generate Metrics Json Object如何序列化 Map<String, Map<MetricName, ?扩展 Metric>> 以生成 Metrics Json 对象
【发布时间】:2020-04-19 21:36:34
【问题描述】:

我尝试使用 Gson 序列化我的 Map&lt;String, Map&lt;MetricName, ? extends Metric&gt;&gt; 对象,但我得到 JSON 字符串响应。而且我在内部 Map&lt;MetricName, ? extends Metric&gt; 中有指标值和名称这是我的代码如下所示:

@GetMapping(path = "/showRawKafkaMetrics", produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public List<String> getMetrics() throws IOException, ClassNotFoundException {
        List<String> list = new ArrayList<>();
        Gson gson = new Gson();
        for (MessageListenerContainer container : kafkaListenerEndpointRegistry.getListenerContainers()){
            list.add(gson.toJson(container.metrics()));
        }
        return list;
    }

【问题讨论】:

  • 不清楚你在问什么。 MetricName 和 Metric 是什么?返回的List&lt;String&gt; 与指标映射结构有何关系?
  • Kafka 已经内置了带有 Jackson 的 JSON 序列化器。为什么要使用 Gson?

标签: java spring serialization apache-kafka gson


【解决方案1】:

我收到 JSON 字符串响应

嗯,你回来了List&lt;String&gt;

如果您希望 Spring 返回 JSON,则为 application/json 添加响应映射(您已这样做;produces = MediaType.APPLICATION_JSON_VALUE)

如果您期待一些响应,例如

{
  "foo": {
    "metric": "bar" 
  }
}

那么你不能返回List&lt;?&gt;,因为那是一个对象/映射。

理想情况下,您应该为每个返回的类型都有一个具体的响应模型类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多