我正在将Spring Boot从版本2迁移到版本3.
在我以前的实现中,我是以v2.8.4 documentation为基础的,一切都运行得很好.
目前,ListenerUtils.byteArrayToDeserializationException已被删除,我必须使用SerializationUtils.byteArrayToDeserializationException.
对于这一点,我以v3.1.x documentation为基础,但我有问题.
文档中给出的示例,确切地说就是这一部分,不能编译:
DeserializationException deserEx = SerializationUtils.byteArrayToDeserializationException(this.logger,
headers.get(i).get(SerializationUtils.VALUE_DESERIALIZER_EXCEPTION_HEADER));
从理论上讲,传递的是一个byte[],但该方法只接受一个头.所以我们需要一个石膏.使用ListenerUtils,我将其转换为byte[].但现在,我强制转换为Header或RecordHeader,我得到以下错误->;外来反序列化异常标题被忽略;可能的攻击?类似于以下内容:
DeserializationException exception = SerializationUtils.byteArrayToDeserializationException(
new LogAccessor(IndexingService.class),
new RecordHeader(SerializationUtils.KEY_DESERIALIZER_EXCEPTION_HEADER,
(byte[]) headersOfNullItem.get(SerializationUtils.VALUE_DESERIALIZER_EXCEPTION_HEADER)));
我曾try 创建一个DesializationExceptionHeader,但它是包保护的.
我是不是遗漏了什么?我如何避免这个问题,以便处理反序列化中的错误?
Edit (as Artem Bilan mentioned):个
而不是
@Header(KafkaHeaders.BATCH_CONVERTED_HEADERS) List<Map<String, Object>> headers
我用
@Header(KafkaHeaders.BATCH_CONVERTED_HEADERS) Headers headers
我测试它是这样的:
private byte[] header(DeserializationException deserEx)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try
{
new ObjectOutputStream(baos).writeObject(deserEx);
}
catch (IOException e)
{
throw new UncheckedIOException(e);
}
return baos.toByteArray();
}
}
@Test
...
Headers headers = new RecordHeaders();
myObjects.forEach(myObject -> headers.add("traceparent", "00-f569e0cc279ef4a0-5d47674154157a2d-01".getBytes(StandardCharsets.UTF_8)));
myObjects.add(null);
DeserializationException deserializationException = new DeserializationException("aDeserializationException", null, false, null);
Header header = new RecordHeader(SerializationUtils.KEY_DESERIALIZER_EXCEPTION_HEADER, header(deserializationException));
headers.add(header);
classUnderTest.myMethod(myObjects, headers)
...
但我仍然收到相同的错误.
此外,当我运行该应用程序时,我收到以下错误:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.HashMap<?, ?>] to type [@org.springframework.messaging.handler.annotation.Header org.apache.kafka.common.header.Headers]