0

環境: Tomcat v7.0 を実行する Eclipse、Java 用の Stripes フレームワークと連携し、JQuery ajax 呼び出しを介してサービスに送信します。

Javascript:

jQuery( function(){
jQuery('#testForm').submit( function(e) {
    e.preventDefault();

    var dataString = jQuery('#testInput').val();  //  Pulled from a textarea for testing purposes.
    var urlString = jQuery('#urlDropdown').val();  //  Pulled from a dropdown for testing purposes.
    if( (jQuery('#urlId') != "" )   &&
        (!isNaN(parseInt( jQuery('#urlId').val() )) )   ){  //  Pulled from an input type=text for testing purposes.
        urlString += '?id=' + parseInt( jQuery('#urlId').val() );
    }
    alert("urlString:  " + urlString);
    jQuery.ajax({  
        type: "POST",  
        url: urlString,
        data: dataString,  
        dataType:  'json',
        success: function( returnData ) {  
            jQuery('#content').html(JSON.stringify(returnData));
        },
        fail: function( returnData ) {  
            alert("FAIL");
        }
    });  
});
});

ストライプインターセプター:

@Before(stages=LifecycleStage.BindingAndValidation, on={"setClient"})
private Resolution intercept() {
    String rbody = getRequestBody();
    log.info("BODY: " + rbody);

    this.setBody( rbody );

    return null;
}

そして、getRequestBody使用されている方法:

protected String getRequestBody(){
    StringBuffer body = new StringBuffer();
    String line = null;
    try {
        BufferedReader reader = getContext().getRequest().getReader();
        while ((line = reader.readLine()) != null)
            body.append(line);
    } catch (Exception e) {
        log.error("Buffered Reader Failed", e);
        e.printStackTrace();
    }

    log.info("BODY: " + body.toString());
    return body.toString();
}

私は Firebug を使用して入力をテストしていますが、リクエストの投稿本文は確かに大量の json で満たされています。

そこでのlog.info呼び出しは、完全に空の文字列を出力します。getRequest でを呼び出すgetContentLength()と、コンテンツに適切な文字数があることがわかります。しかし、コンテンツ自体はnullとして出てきます。

私は 99.99% 確信しており、コードの他のどこにも Request 本文が消費されていません。他のすべてのファイルを削除したので、現時点ではこれが Stripes フレームワーク内の唯一のアクション ファイルです。

どういうわけか、リクエストの本文は完全に空です。肉の多いjsonでいっぱいになるはずです。助けてください、スタック オーバーフロー、あなただけが私の望みです!

4

1 に答える 1

1

Stripes IRC チャンネルのすばらしい人々のおかげで、答えがあります! 私は次のように追加する必要がありましcontentType: "application/json",た:

jQuery.ajax({  
    type: "POST",  
    url: urlString,
    contentType: "application/json",
    data: dataString,
    dataType:  'json',
    processData: false,
    success: function( returnData ) {  
        jQuery('#content').html(JSON.stringify(returnData));
    },
    fail: function( returnData ) {  
        alert("FAIL");
    }
});  
于 2013-04-24T15:33:29.383 に答える