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の初心者なので、これが基本的なものであれば許してください。生の JSON を Netty 内から他の URL に投稿することについて、他にも多くの質問を見つけましたが、それを受け取ることについては何もありませんでした。

4

1 に答える 1

3

私はデータHttpPostRequestDecoderの読み取りapplication/x-www-form-urlencodedまたは模倣にのみ使用しました。

スヌープの例のように、リクエストから直接データを読み取ってみてください。

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