序列化netty';这是完整的httprequest

序列化netty';这是完整的httprequest,netty,Netty,我的Java项目中运行着一个netty服务器,正在侦听请求。Netty将请求在内部转换为FullHttpRequest类型,然后再将其交给处理程序。现在在我的处理程序中,我正在尝试序列化,因为我必须将它推送到rabbitmq。但看起来它是不可序列化的: due java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest at org.apache.camel.impl.conve

我的Java项目中运行着一个netty服务器,正在侦听请求。Netty将请求在内部转换为
FullHttpRequest
类型,然后再将其交给处理程序。现在在我的处理程序中,我正在尝试序列化,因为我必须将它推送到rabbitmq。但看起来它是不可序列化的:

due java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:566)
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:174)
    at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:99)
    ... 31 more
Caused by: org.apache.commons.lang3.SerializationException: java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
    at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:139)
    at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:161)
    at com.company.myproject.util.RequestToByteArrayConverter.convertTo(RequestToByteArrayConverter.java:28)
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:276)
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:165)
    ... 32 more

有两种方法可以解决这个问题

  • 扩展FullHttpRequest/Response以实现可序列化。这是非常忙碌的,因为您可能会为相当多的类编写读/写解析
  • 创建您自己的FullHttpRequest/Response的影子类,这些影子类从影子类复制有意义的位,并可序列化。然后编写自己的适配器

我个人采用影子法。

我已经按照你在第2点中的建议做了。无论如何,谢谢:)