简体   繁体   English

无法反序列化来自 kafka 主题的 json 字符串,该主题在蛇案例中具有属性

[英]Not able to Deserialize json string coming from kafka topic which has attributes in snake case

Him

I am not able to deserialize a json string coming from kafka topic.我无法反序列化来自 kafka 主题的 json 字符串。 Attributes are in mix of snake case and camel case structure, for example: input:属性混合了蛇案例和骆驼案例结构,例如:输入:

{
"event_type" : "ABC",
"user_id" : 1567221,
"name" : "HGHAAAB" //here no snake case
"user_contact" : "12345678",
"phoneNumber" : "91222"
} 

Now I want to create Request DTO on my side like below:现在我想在我这边创建请求 DTO,如下所示:

public class KafkaRequest { 
private String eventType;
private int userId;
private String name; 
private String userContact;
private String phoneNumber;

//getters and setters

} 

Can any one suggest what should be the correct way?任何人都可以建议正确的方法吗? I tried creating CustomNameStrategy and deserializing with ObjectMapper.readValue() but it did not work.我尝试创建 CustomNameStrategy 并使用 ObjectMapper.readValue() 反序列化,但它不起作用。

Thanks is advance!!!谢谢提前!!!

If you are using jackson you can either use @JsonProperty 6.1.如果您使用的是jackson ,您可以使用@JsonProperty 6.1。 @JsonProperty @JsonProperty

@JsonProperty("event_type")
private String eventType;

Or you can set property PropertyNamingStrategy.SNAKE_CASE to ObjectMapper或者您可以将属性PropertyNamingStrategy.SNAKE_CASE设置为ObjectMapper

objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);

You can use GSON there are way to define field name strategy您可以使用 GSON 有办法定义字段名称策略

Gson gson = new GsonBuilder().disableHtmlEscaping().setFieldNamingStrategy(FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES).create();

or even u can define custom as well甚至你也可以定义自定义

Gson gson = new GsonBuilder().disableHtmlEscaping().setFieldNamingStrategy(new FieldNamingStrategy() {
            @Override
            public String translateName(Field f) {
                return f.getName().toLowerCase(); //or any logic
            }
        }).create();

For Producer just StringSerializer will work对于 Producer,只需 StringSerializer 即可

properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

Assume you already have populated POJO say kafkaRequest then you can publish假设您已经填充了 POJO 说 kafkaRequest 然后您可以发布

ProducerRecord producerRecord = new ProducerRecord<String, String>("topicName", null, gson.toJson(kafkaRequest));

On Consumer side parse back to POJO在消费者端解析回 POJO

properties.setProperty("key.deserializer", StringDeserializer.class.getName());
properties.setProperty("value.deserializer", StringDeserializer.class.getName());
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(properties);
while (true) {
    ConsumerRecords<String, String> records = consumer.poll(100);
    for (ConsumerRecord<String, String> record : records) {
         KafkaRequest kafkaRequest = gson.fromJson(record.value(), KafkaRequest.class);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 Spring Boot 中反序列化 Kafka 主题中的 Json 字符串 - How to deserialize Json string from Kafka topic in spring boot 使用来自同一 kafka 主题的字符串和 JSON 消息 - 反序列化问题 - Consume String and JSON message from same kafka topic - issue with deserialization 使用Jackson进行JSON字符串序列化(驼峰式)和反序列化(来自蛇形) - JSON string serialization ( to camel case ) and deserialization (from snake case )using Jackson 无法使用 gson 将 json 反序列化为案例 class - Not able to deserialize json to case class using gson 泽西JSON从骆驼箱切换到下划线(蛇盒) - Jersey JSON switching from camel case to underscores (snake case) 在Java中将字符串从蛇形字母转换为骆驼形字母 - Converting a string from snake case to camel case in Java 使用Spring Kafka反序列化来自同一Kafka主题的不同JSON有效负载 - Deserializing different JSON payload from same Kafka topic with Spring Kafka 如何将 JSON 密钥从驼峰式大小写更改为 POJO 的蛇式大小写? - How to change JSON key from camelCase to snake case for POJO? 无法将数据从不同的机器推送到 Kafka 主题 - Not able to push data to Kafka topic from different Machine 无法从 kafka 主题轮询/获取所有记录 - Not able to poll / fetch all records from kafka topic
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM