У меня проблема с десериализацией сообщений, опубликованных в теме Кафки. Я использую Spring-boot, Spring Cloud Stream, Apache Kafka и Apache Avro. У объекта, который я пытаюсь десериализовать, есть конструктор, который принимает два аргумента. При получении сообщения из темы я получаю исключение:
org.springframework.messaging.MessagingException: Exception thrown while invoking com.foo.bar.messaging.ResponseListener#handleResponse[1 args];
nested exception is java.lang.RuntimeException: java.lang.NoSuchMethodException: com.foo.bar.TheObject.<init>() at org.springframework.cloud.stream.binding.StreamListenerMessageHandler.handleRequestMessage(StreamListenerMessageHandler.java:63) ~[spring-cloud-stream-2.0.1.RELEASE.jar:2.0.1.RELEASE]
Десериализованный класс имеет конструктор, который принимает 2 аргумента и выглядит следующим образом:
public class TheObject {
private final int thingOne;
private final int thingTwo;
@JsonCreator
public TheObject(@JsonProperty("thingOne") int thingOne, @JsonProperty("thingTwo") int thingTwo) {
this.thingOne = thingOne;
this.thingTwo = thingTwo;
}
}
Ранее я использовал Джексона и только что опубликовал Strings в теме kafka, поэтому аннотации @JsonCreator
было достаточно, чтобы указать мапперу, как построить объект, но теперь я перехожу к использованию Arvo. Джексон больше не используется для этой сериализации. Я оставил аннотации на примере выше, чтобы показать, как он работал.
С точки зрения конфигурации, я использую свойство: dynamicSchemaGenerationEnabled: true
, а не объявляю схемы объекта явно. Похоже, это нормально работает как с весенним реестром схемы, так и с реестром схемы слияния (за исключением описанной здесь проблемы)
Есть ли эквивалент аннотации @JsonCreator
, который будет работать с десериализацией Arvo?
спасибо