2

我正在尝试在后端使用 Netty 构建 REST 服务。我需要能够将原始 JSON 发布到任何键/值参数之外的服务。Content-type=applicaiton/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 内部将原始 JSON 发布到其他 URL 的问题,但没有关于接收它的问题。

4

1 回答 1

3

我只习惯于HttpPostRequestDecoder读取application/x-www-form-urlencoded或模拟数据。

尝试按照snoop示例直接从请求中读取数据。

ChannelBuffer content = request.getContent();
if (content.readable()) {
    String json = content.toString(CharsetUtil.UTF_8);
}
于 2012-08-23T23:14:07.693 回答