我正在使用 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
而不是所需的对象,请告诉我我错在哪里,提前谢谢。
有些情况需要确认:
Serializer
是作品Deserializer
只是有效,但它返回了一个 LinkedHashMap
而不是您期望的对象,对吗?并且您无法将 LinkedHashMap
转换为您的 object
.我发现问题转移到How to Convert/Cast a LinkedHashMap to a Object,而您使用了
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))
我希望我没有错过你的意图,你可以补充必要的情况,以便有人或我可以改进这个答案。