Я пытаюсь спроецировать значения из определенного хранилища состояний в конечную точку REST.
Я создал свою службу REST так же, как в Confluent's Kafka Musi c Пример и добавил одну конечную точку.
@GET
@Path("/foo")
@Produces(MediaType.APPLICATION_JSON)
public List<Foo> getFoo() {
List<Foo> values = new ArrayList<Foo>();
StoreQueryParameters<ReadOnlyKeyValueStore<String, Foo>> params = StoreQueryParameters
.fromNameAndType("FooStore", QueryableStoreTypes
.<String, Foo>keyValueStore());
ReadOnlyKeyValueStore<String, Foo> keyValueStore = streams
.store(params);
KeyValueIterator<String, Foo> range = keyValueStore.all();
while (range.hasNext()) {
KeyValue<String, Foo> next = range.next();
values.add(next.value);
}
return values;
}
Значения в моем магазине были сериализованы Avro, а класс Foo
сгенерирован плагином Avro Maven.
Когда я go к конечной точке в моем браузере, однако я получаю сообщение об ошибке: Not an array: {"type":"record","name":"Foo","namespace":"com.example","fields":[...]} (through reference chain: java.util.ArrayList[0]->com.example.Foo["schema"]->org.apache.avro.Schema$RecordSchema["elementType"])
.
Я думаю, что смогу использовать AvroMapper
Джексона каким-то образом, как предложено в этот ответ , но мне не удалось заставить его работать.