我正在尝试序列化HashMap<String, String>
,这是一些最终会出现在ElasticSearch索引中的DTO属性。
我有这样的课:
class MyDto {
HashMap<String, String> properties;
}
我希望所有属性都直接位于ES中的_source
下:
_source: {
"firstPropKey": "firstValue",
"secondPropKey": "secondVal"
...
}
不是这个:
_source: {
properties: {
"firstPropKey": "firstValue",
"secondPropKey": "secondVal"
...
}
}
我尝试了各种实现,但无法使其正常工作。这是一种方法:
final StreamsBuilder builder = new StreamsBuilder();
builder.stream(dataTopicName, Consumed.with(Serdes.String(), dtoSerde))
.map((key, myDTO) -> new KeyValue<>(id, myDTO.properties))
.to(elasticIndexTopicName, Produced.with(Serdes.String(), dtoPropsSerde));
问题在于dto.properties
已用HashMap
参数化了<String, String>
,而Jackson2Serde
不允许参数化的类,所以我需要这样:
private final Jackson2Serde<HashMap> dtoPropsSerde = new Jackson2Serde<>(mapper, HashMap.class);
但是随后我得到类型错误,更具体地说:Cannot resolve method to(String, Produced<K,V>)
如果我制作了dto.properties
个旧的未参数化的HashMap,仍然无法使用。在我的日志中找不到有用的东西。
我想念什么?
编辑:值得注意的是,在elasticIndexTopicName
主题中我什么都没得到,ElasticSearch接收器连接正在读取。