使用HttpPostRequestDecoder与Netty 3.x

时间:2012-04-06 22:56:50

标签: post netty

我正在尝试使用Netty Extension 1.1.9中的HttpPostRequestDecoder和Netty 3.3.1。但是,当我试图从内置的Netty HttpRequest到org.jboss.netty.handler.codec.http2包中使用的内容时,我遇到了类转换问题。

解决这个问题的正确方法是什么?

org.jboss.netty.handler.codec.http.DefaultHttpRequest request;
HttpPostRequestDecoder decoder = new HttpPostRequestDecoder((org.jboss.netty.handler.codec.http.HttpRequest) request);

3 个答案:

答案 0 :(得分:1)

我从未使用netty扩展,但从快速查看源代码看起来你需要确保只使用随附的http编解码器。从您的描述中看起来您似乎尝试混合netty附带的http编解码器和netty扩展附带的那些。

答案 1 :(得分:0)

您是否尝试过使用主分支中的HttpPostRequestDecoder?

https://github.com/netty/netty/tree/master/codec-http/src/main/java/io/netty/handler/codec/http

这似乎对我有用。见https://github.com/mashupbots/socko/tree/master/socko-webserver/src/main/java/org/mashupbots/socko/postdecoder

您只需将所有相关文件放入源目录并更改命名空间即可。

答案 2 :(得分:0)

我最终在http.DefaultHttpRequest和http2.DefaultHttpRequest实现之间编写了一个小转换器:

org.jboss.netty.handler.codec.http2.DefaultHttpRequest convertedRequest = new org.jboss.netty.handler.codec.http2.DefaultHttpRequest(HttpVersion.HTTP_1_0, org.jboss.netty.handler.codec.http2.HttpMethod.POST, request.getUri());
convertedRequest.setContent(request.getContent());
convertedRequest.setChunked(request.isChunked());
// convert the headers
for (Entry<String, String> entry : request.getHeaders()) {
    convertedRequest.setHeader(entry.getKey(), entry.getValue());
}