Java 8 / Spring 4 MVC webapp / Maven / jQuery 3.3.1
Итак, я создал Spring MVC webapp, index.jsp которого использует вызов ajax.Обратите внимание, что я заменил устаревший jQuery на успех и ошибку для современного done и fail
--- фрагмент index.jsp ----
jQuery.fn.serializeObject = function() {
var arrayData, objectData;
arrayData = this.serializeArray();
objectData = {};
$.each(arrayData, function() {
var value;
if (this.value != null) {
value = this.value;
} else {
value = '';
}
if (objectData[this.name] != null) {
if (!objectData[this.name].push) {
objectData[this.name] = [objectData[this.name]];
}
objectData[this.name].push(value);
} else {
objectData[this.name] = value;
}
});
return objectData;
};
function popupRuleDeck_update_submit() {
var formJsonObj = $('#form_popupRuleDeck_update').serializeObject();
var formJsonStr = JSON.stringify( formJsonObj);
$.ajax({
url: '${pageContext.request.contextPath}/ruleDeck_update',
type: "post",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: formJsonStr
}).done( function(response, message, xhr) {
console.log("done entered")
console.dir( response);
var selectedRow = $('#ruleDeckTable > tbody > tr.selected')
var selectedData = selectedRow.data();
console.log( "selectedRowData: " + selectedRowData);
console.log( "response.data: " + response.data() );
$('#ruleDeckTable').row( selectedRow).data( response).draw();
console.log("done exited")
}).fail( function( xhr, status, response) {
console.dir( "failed status:" + status);
console.dir( "failed response:" + response);
var returnedStr = JSON.stringify( response);
$.each( response, function( key, val) {
console.log("---" + key + ":" + val);
});
console.dir( "failed returnedStr:" + returnedStr);
alert( "ruleDeck insert/update error: " + response)
return false;
});
}
на метод в моемконтроллер, аннотированный @Controller NOT @ RestController
@RequestMapping( value="/ruleDeck_update", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody RuleDeck ruleDeckUpdateUpdate( @RequestBody RuleDeck formRuleDeck)
{
logger.info("entering ruleDeckUpdateUpdate");
RuleDeck ruleDeck = null;
try {
ruleDeck = tryThisService.findOneRuleDeck( formRuleDeck.getId());
ruleDeck.setRuleDeckId( formRuleDeck.getRuleDeckId());
ruleDeck.setRevision( formRuleDeck.getRevision());
ruleDeck.setName( formRuleDeck.getName());
ruleDeck.setDeckType( formRuleDeck.getDeckType());
ruleDeck.setFileLocation( formRuleDeck.getFileLocation());
ruleDeck = tryThisService.updateOneRuleDeck( ruleDeck);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
ruleDeck.setName( "JPE:" + e.getMessage());
} catch ( Exception e) {
ruleDeck.setName( "Exception:" + e.getMessage());
}
logger.info("exiting ruleDeckUpdateUpdate");
return ruleDeck; //should be implicitly converted into json format and sent back to the request.
}
Как и раньше, вызов ajax отправляет JSON методу, который находит и обновляет существующий объект, который сохраняетсяв базе данных, пока все хорошо.Метод выполняется без ошибок.Но теперь вызывается .fail (), и я вижу следующее в консоли браузера
failed status: error
failed response:
failed returnedStr:
Все это, похоже, указывает на то, что оператор return ruleDeck в конце моего метода java фактически возвращаетничего, или, может быть, пустая строка.Я в тупике.Я ожидаю, что ответом будет объект JSON в соответствии с сообщениями, такими как здесь
Или, возможно, лучший способ - это вернуть ResponseEntity (ruleDeck, HttpStatus.OK).Но тогда как мне прочитать это в браузере?
Помогите, пожалуйста!
TIA,
code_warrior