一,HTTP解碼器可能會将一個HTTP請求解析成多個消息對象。
經過HttpServerCodec解碼之後,一個HTTP請求會導緻:ParseRequestHandler的 channelRead()方法調用多次(測試時 "received message"輸出了兩次)
可以用HttpObjectAggregator 将多個消息轉換為單一的一個FullHttpRequest,如下:
此時,一個HTTP消息(Object msg)是下面這樣的。
從上面可以看出,實體首部字段Content-Length是17,表明實體主體有17個位元組。
而我發送的消息是這樣的:
HTTP POST 請求,請求體是JSON格式的資料。這裡使用的是json-lib解析的 Json字元串。代碼如下:
需要注意是:使用json-lib解析Json字元串時,需要其他的依賴包如下:
解析完成之後,需要把處理後的結果發送到下一個ChannelHandler,進行下一步的處理。
這裡,通過 ctx.fireChannelRead(job); 将處理後的結果發送到下一個Channel處理。
下一個Handler是OozieRequestHandler,它負責向Oozie Server送出作業,之後傳回jobId給用戶端(HttpServerCodec Handler 負責底層傳輸細節)。
Netty構造一個http 響應的方法如下:
整個完整代碼可參考:https://github.com/hapjin/netty_schedule
本文轉自hapjin部落格園部落格,原文連結:http://www.cnblogs.com/hapjin/p/5610253.html,如需轉載請自行聯系原作者