天天看點

Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)

一,HTTP解碼器可能會将一個HTTP請求解析成多個消息對象。

經過HttpServerCodec解碼之後,一個HTTP請求會導緻:ParseRequestHandler的 channelRead()方法調用多次(測試時 "received message"輸出了兩次)

可以用HttpObjectAggregator 将多個消息轉換為單一的一個FullHttpRequest,如下:

此時,一個HTTP消息(Object msg)是下面這樣的。

Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)
Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)

從上面可以看出,實體首部字段Content-Length是17,表明實體主體有17個位元組。

而我發送的消息是這樣的:

Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)

HTTP POST 請求,請求體是JSON格式的資料。這裡使用的是json-lib解析的 Json字元串。代碼如下:

Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)
Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)

需要注意是:使用json-lib解析Json字元串時,需要其他的依賴包如下:

Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)

解析完成之後,需要把處理後的結果發送到下一個ChannelHandler,進行下一步的處理。

Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)
Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)

 這裡,通過 ctx.fireChannelRead(job); 将處理後的結果發送到下一個Channel處理。

下一個Handler是OozieRequestHandler,它負責向Oozie Server送出作業,之後傳回jobId給用戶端(HttpServerCodec  Handler 負責底層傳輸細節)。

Netty構造一個http 響應的方法如下:

Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)
Netty學習筆記之一(Netty解析簡單的Http Post Json 請求)

整個完整代碼可參考:https://github.com/hapjin/netty_schedule

本文轉自hapjin部落格園部落格,原文連結:http://www.cnblogs.com/hapjin/p/5610253.html,如需轉載請自行聯系原作者