我正在使用Spring Kafka集成,我有自己的值泛型序列化器/反序列化器,如下所示
串行:
public class KafkaSerializer<T> implements Serializer<T> {
private ObjectMapper mapper;
@Override
public void close() {
}
@Override
public void configure(final Map<String, ?> settings, final boolean isKey) {
mapper = new ObjectMapper();
}
@Override
public byte[] serialize(final String topic, final T object) {
try {
return mapper.writeValueAsBytes(object);
} catch (final JsonProcessingException e) {
throw new IllegalArgumentException(e);
}
}
}
解串器:
public class KafkaDeserializer<T> implements Deserializer<T> {
private ObjectMapper mapper;
@Override
public void close() {
}
@Override
public void configure(final Map<String, ?> settings, final boolean isKey) {
mapper = new ObjectMapper();
}
@Override
public T deserialize(final String topic, final byte[] bytes) {
try {
return mapper.readValue(bytes, new TypeReference<T>() {
});
} catch (final IOException e) {
throw new IllegalArgumentException(e);
}
}
}
序列化程序工作正常但是当消耗消息时反序列化值得我得到一个LinkedHashMap
而不是期望的对象,请提前告诉我我在哪里错误,提前谢谢。
答案 0 :(得分:0)
有些情况需要确认:
Serializer
正在运作Deserializer
只是有效,但它返回了LinkedHashMap
而不是您期望的对象,对吗?而且您无法将LinkedHashMap
转换为object
。我发现问题转移到如何将LinkedHashMap转换/转换为对象,并且您使用了ObjectMapper
。如果所有情况都可以确认,我在这里发现一个好的帖子可能会回答你的问题Casting LinkedHashMap to Complex Object
mapper.convertValue(desiredObject, new TypeReference<type-of-desiredObject>() { })
ObjectMapper
的API在[此处](https://fasterxml.github.io/jackson-databind/javadoc/2.3.0/com/fasterxml/jackson/databind/ObjectMapper.html#convertValue(java.lang.Object,com.fasterxml.jackson.core.type.TypeReference))
我希望我不会错过你的意图,你可以补充必要的情况,所以有人或我可以改善这个答案。