正常情况下,我们可以使用KafkaTemplate.send(topic, Object); 来发送DTO对象,并且在Kafka中会解释成正确的对象,但是有的时候,我们不想写一个DTO对象,又或者收到的数据是个JSON格式字符串,没有DTO对应,那么该怎么办呢?
Kafka中,我们可以直接发送任意对象,但是某些情况下,我们得到是JSON格式的一个字符串,例如下面:
String json = """
{
"name": "Bill",
"age": 10
}
"""
kafkaTemplate.send(topic, json);
发送到Kafka中后,我们用工具查看,发现JSON字符串会被转义,变成纯字符串,而不是一个对象存储在Kafka中了。
如何发送的时候,能变成真正的对象呢?
解决方案:
public void sendAsObject(String topic, String json) {
JSONObject object= JSON.parseObject(json);
kafkaTemplate.send(topic, object);
}
用上面的方法就OK了:
sendAsObject(json);
如果不喜欢 FastJSON,也可以使用Map来实现:
public void sendAsObject(String topic, String json) {
Map<String, Object> object= new ObjectMapper().readValue(json, Map.class);
kafkaTemplate.send(topic, object);
}
现在就变成真正的对象数据了: