jquery - Spring MVC 方法不将 JSON 字符串返回到 jQuery ajax 调用 - 第二部分
问题描述
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:
这似乎都表明我的 java 方法末尾的“return ruleDeck”语句实际上没有返回任何内容,或者可能是一个空字符串。我难住了。根据这里的帖子,我希望响应是一个 JSON 对象
或者也许更好的方法是返回一个 ResponseEntity(ruleDeck, HttpStatus.OK) 。但是,我将如何在浏览器领域读到它呢?
请帮忙!
TIA,
code_warrior
解决方案
推荐阅读
- apache-spark - Spark 数据框(在 Azure Databricks 中)保存在数据湖(gen2)上的单个文件中并重命名文件
- arrays - 无法使用 NodeJs + Express 服务器上的把手在索引上显示数组
- java - OWLAPI 5:如何遍历我的本体类以插入个体?
- python - Python - 如果第一个元组键不在其他字典中,则从字典中删除项目
- machine-learning - 多时间序列中的模式识别
- javascript - 防止功能组件使用默认值覆盖数据
- nginx - Nginx:缓存 Brotli 压缩代理上游响应
- r - 使用特定过滤器进行汇总
- powershell - 如何将参数列表中的类对象传递给另一台计算机并在其上调用函数?
- ios - 如何修复 Xcode 中的“固定宽度约束可能导致剪辑”警告?