无法将 class org.json.JSONObject 的值转换为 class org.apache.kafka.common.serialization.StringSerializer/ Js



我的配置是怎样的:

Map<String, Object> props = kafkaProperties.buildProducerProperties();
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

我应该为JSONObject使用哪个序列化器?

我应该通过kafkaTemplate发送JsonObject到它会更好地发送字符串?(jsonObject.toString ());

总是建议使用特定于序列化器来代替使用StringSerializer。原因是,字符串是非常通用的,它可以是一个有效或无效的JSON字符串。

如果你使用StringSerializer,KafkaProducer序列化器不会抱怨给定的字符串是否是一个有效的JSON。

因此,如果将来某些开发人员试图发送格式错误的JSON字符串,它可能会影响消费者。而且,您编写的序列化器可以在类似的用例中重用。

因此,最好编写一个新的序列化器来验证JSON字符串(或)编写JSONObjectSerializer,甚至为您的自定义POJO类编写序列化器(如果您有的话)。

public class JSONObjectSerializer implements Serializer<JSONObject> {
public byte[] serialize(String topic, JSONObject data) {
return data.toString().getBytes(); // or whatever is appropriate.
}
}

你无论如何必须将其转换为JSON,重点是,而不是在你的主逻辑(KafkaProducer)中做,你写在一个Serializer

如果你想将任何对象转换为JSON。

private ObjectMapper objectMapper = new ObjectMapper();
public byte[] serialize(String topic, Object data) {
return objectMapper.writeValueAsBytes(data);
}

相关内容

  • 没有找到相关文章

最新更新