Вызов Ajax в инфраструктуру Stripes в Java приводит к пустому телу запроса

Среда: Eclipse, работающий с Tomcat v7.0, работающий со средой Stripes для Java и отправляющий сервису через ajax-вызов JQuery.

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 вызовы там выводят полностью пустую строку. Если я позвоню getContentLength() в getRequest он говорит мне, что контент имеет соответствующее количество символов. Но сам контент выходит как ноль.

Я на 99,99% уверен, что больше нигде в коде не используется тело запроса. На данный момент это мой единственный файл действий в среде Stripes, так как я удалил все остальные файлы.

Почему-то тело запроса полностью пусто. Это должно быть полно мясного JSON. Помоги мне, переполнение стека, ты моя единственная надежда!

1 ответ

Решение

Спасибо замечательным людям на IRC канале Stripes, у меня есть ответ! Мне нужно было добавить в 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");
    }
});  
Другие вопросы по тегам