我有一个Kafka消费者库,它消费一个字节数组。我的上游总是将JSON字符串发布为字节。在消费和转换为字符串时,我需要能够将其反序列化为一个类,这个类对于不同的消费者来说是不同的。
以下是我尝试反序列化的方式
public class MessageUtil<T> {
public T deserializeByStringConversion(final byte[] message) throws Exception {
String json = IOUtils.toString(message);
return new ObjectMapper().readValue(json, new TypeReference<T>() {});
}
}
字符串
下面是我如何尝试调用它
MessageUtil<MyClass> messageUtil;
@BeforeClass
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testMyClass() throws Exception {
MyClass myClass = messageUtil.deserializeByStringConversion(IOUtils.toByteArray(request));
Assert.assertNotNull(myClass);
}
型
这将引发以下异常-
java.lang.ClassCastException:java.util.LinkedHashMap不能强制转换为com.a.b.c.d.MyClass
我有多个消费者在不同的类上工作,其中MyClass将是不同的。我如何编写这个反序列化器来处理泛型类型?
1条答案
按热度按时间umuewwlo1#
例如,您应该将类型信息作为deserializeByStringConversion签名传递。
个字符