Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot SprintBoot kafka值序列化程序_Spring Boot_Apache Kafka_Kafka Consumer Api_Spring Kafka_Jsonserializer - Fatal编程技术网

Spring boot SprintBoot kafka值序列化程序

Spring boot SprintBoot kafka值序列化程序,spring-boot,apache-kafka,kafka-consumer-api,spring-kafka,jsonserializer,Spring Boot,Apache Kafka,Kafka Consumer Api,Spring Kafka,Jsonserializer,我有一个带有ApacheKafka(开源流处理软件)的SpringBoot项目 我有一个听众 @KafkaListener(topics = "test") public String consume(Hostel hostel) throws IOException { } 这个序列化程序 public class HostelSerializer implements Deserializer<Hostel> { private final ObjectMapper

我有一个带有ApacheKafka(开源流处理软件)的SpringBoot项目 我有一个听众

@KafkaListener(topics = "test")
public String consume(Hostel hostel) throws IOException {
}
这个序列化程序

public class HostelSerializer implements Deserializer<Hostel> {

    private final ObjectMapper objectMapper;

    public InputRequestMessageSerializer(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    @Override
    public void configure(Map<String, ?> map, boolean b) {
        this.configure(map,b);
    }

    @SneakyThrows
    @Override
    public Hostel deserialize(String s, byte[] bytes) {
        return objectMapper.readValue(bytes, Hostel.class);
    }

    @Override
    public void close() {
        this.close();
    }
}
当我收到一条信息时,我有这个错误

Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [java.lang.String] 
to [com.message.Hostel] for GenericMessage [.....}]
查看日志时,不会从属性中获取值:

spring:
    kafka:
        consumer:
          bootstrap-servers: localhost:9092
          group-id: group_id
          topics: test
          key-serializer: org.apache.kafka.common.serialization.StringSerializer
          value-serializer: com.kafka.config.HostelSerializer
2020-04-09 16:41:30,840 INFO  :  gid: trace= span= [main] o.a.k.c.consumer.ConsumerConfig ConsumerConfig values: 
    key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
    value.deserializer = class org.apache.kafka.common.serialization.StringDeserializer

您可以混合反序列化/序列化。由于您配置了使用者,因此只需使用适当的反序列化接口和实现:

kafka:
consumer:
  bootstrap-servers: localhost:9092
  group-id: group_id
  topics: test
  key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
  value-deserializer: com.kafka.config.HostelDeserializer
。。。而且

public class HostelDeserializer implements Deserializer<Hostel> { .. }
公共类HostedeSerializer实现反序列化程序{..}

您可以混合反序列化/序列化。由于您配置了使用者,因此只需使用适当的反序列化接口和实现:

kafka:
consumer:
  bootstrap-servers: localhost:9092
  group-id: group_id
  topics: test
  key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
  value-deserializer: com.kafka.config.HostelDeserializer
。。。而且

public class HostelDeserializer implements Deserializer<Hostel> { .. }
公共类HostedeSerializer实现反序列化程序{..}

Boot应该自动将
值序列化程序
属性连接到其自动配置的消费者工厂。@GaryRussell:我的错误。我注意到OP混淆了序列化和反序列化。Boot应该自动将
值序列化程序
属性连接到其自动配置的使用者工厂中。@GaryRussell:我的错误。我注意到OP混淆了序列化和反序列化。在
kafka:
之前有
spring:
元素吗?发出
ConsumerConfig
的信息日志应该显示应用的属性。在
kafka:
之前是否有
spring:
元素?发出
ConsumerConfig
的信息日志应显示应用的属性。