java - 如何转换地图> 进入 JsonObject
问题描述
我正在尝试将 Map> 转换为 JSON 对象。我尝试了两种不同的转换方式。
- 使用对象映射器:
这是代码的样子,但返回 null。
@GetMapping("/showRawKafkaMetrics")
public String getMetrics() throws JsonProcessingException {
StringBuilder sb = new StringBuilder();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
for (MessageListenerContainer messageListenerContainer : kafkaListenerEndpointRegistry
.getListenerContainers()) {
// The below map of metrics I'm trying to convert into json Object
Map<String, Map<MetricName, ? extends Metric>> metrics = messageListenerContainer.metrics();
metrics.forEach((clientid, metricMap) -> {
log.info("Client Id:"+sb.toString());
String json = null;
try {
json = objectMapper.writeValueAsString(metricMap);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
log.info("JSON Metrics :"+json);
metricMap.forEach((metricName, metricValue) -> {
log.info("------------ Metric name: " + metricName.name() + " ----------- Metric value: "
+ metricValue.metricValue() + LINE_BREAK);
});
});
}
String metrics = sb.toString();
return metrics;
}
****2. Using JSON Object
Here is the code looks like:****
@GetMapping("/showRawKafkaMetrics")
public String getMetrics() throws JsonProcessingException {
StringBuilder sb = new StringBuilder();
JsonObject jsonObject = new JsonObject();
for (MessageListenerContainer messageListenerContainer : kafkaListenerEndpointRegistry
.getListenerContainers()) {
// The below map of metrics I'm trying to convert into json Object
// The below map of metrics I'm trying to convert into json Object
Map<String, Map<MetricName, ? extends Metric>> metrics = messageListenerContainer.metrics();
metrics.forEach((clientid, metricMap) -> {
log.info("Client Id:"+sb.toString());
metricMap.forEach((metricName, metricValue) -> {
log.info("------------ Metric name: " + metricName.name() + " ----------- Metric value: "
+ metricValue.metricValue() + LINE_BREAK);
jsonObject.add(metricName.toString(), (JsonElement) metricValue);
log.info("JSON METRICS:"+jsonObject);
});
});
}
String metrics = sb.toString();
return metrics;
}
在这两种情况下,我都会得到空指针。谁能建议我将度量地图转换为 JsonObject 的最佳方法。因此,我可以进一步处理它以创建仪表板。
解决方案
让春天为你做这件事。添加@ResponseBody
和produces = "application/json"
。
问题是 about Map<String, Map<MetricName, ? extends Metric>>
,它是由 返回的messageListenerContainer.metrics()
,但是您有一个这些messageListenerContainer
对象的列表,所以您真正想要的是其中的一个List
,将其转换为 JSON。
@GetMapping(path = "/showRawKafkaMetrics", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String getMetrics() {
List<Map<String, Map<MetricName, ? extends Metric>>> list = new ArrayList<>();
for (MessageListenerContainer container : kafkaListenerEndpointRegistry.getListenerContainers())
list.add(container.metrics());
return list;
}
推荐阅读
- wordpress - 无法从 WordPress 网站发送任何电子邮件
- algorithm - 以下短算法的时间复杂度是多少?
- c - 检查双字符 - 函数
- kotlin-multiplatform - 无法从 Kotlin Multiplatform 中的 iOS 相机获取输出缓冲区
- python - 将字符串保存到文件而不使用 Python 转换换行符
- scala - Spark SQL - 删除后列可用
- unity3d - unity“初始化例程”
- python - 使用字符串访问数组中元素的索引,但字符串是随机选择的
- php - 在 Symfony 5 中验证 AJAX 提交的表单
- sql - 使用 tSQLt 工具和集成到 Sonarqube 仪表板中的 SQL 单元测试的代码覆盖率