Вызов 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");
}
});