2012-08-23 43 views
2

我試圖在後端使用Netty構建REST服務。我需要能夠將原始JSON發佈到任何鍵/值參數之外的服務。 Content-type = applicaiton/json不構成多部分。Netty HTTPRequest未捕獲發佈JSOn

我能夠獲得服務的初始部分來接收請求,但是當我將MessageEvent內容轉換爲HTTPRequest時,它不再有任何與之關聯的提出的數據。這讓我無法獲取JSON數據。

爲了訪問發佈的JSON,我需要使用不同的過程從MessageEvent中提取數據嗎?

這是問題的片段。

@Override 
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { 
    System.out.println("The message was received"); 
    HttpRequest request = (HttpRequest) e.getMessage(); 
    if (request.getMethod() != POST) { 
     sendError(ctx, METHOD_NOT_ALLOWED); 
     return; 
    } 


    // Validate that we have the correct URI and if so, then parse the incoming data. 

    final String path = sanitizeUri(request.getUri()); 
    decoder = new HttpPostRequestDecoder(request); 
    System.out.println("We have the decoder for the request"); 
    List<InterfaceHttpData> datas = decoder.getBodyHttpDatas(); 
    for (InterfaceHttpData data : datas){ 
    System.out.println(data.toString()); 
    } 

我在想什麼導致這種情況?我需要使用ChunkedWrite部分嗎?如果這是基本的,我是Netty的一個小白,所以請原諒我。我發現很多關於從Netty內部向其他URL發佈原始JSON的其他問題,但沒有收到它。

回答

3

我只使用HttpPostRequestDecoder來讀取application/x-www-form-urlencoded或mime數據。

請嘗試按照snoop示例直接讀取請求中的數據。

ChannelBuffer content = request.getContent(); 
if (content.readable()) { 
    String json = content.toString(CharsetUtil.UTF_8); 
} 
+0

探聽鏈路是打破 –

+0

工作[鏈接](https://github.com/netty/netty/blob/master/example/src/main/java/io/netty/example/http/snoop/ HttpSnoopServerHandler.java)到snoop示例 –