java - 如何在spring boot中处理ajax post数据
问题描述
我正在使用jquery ui sortable
重新排序项目中的页面顺序,但是似乎我不知道如何在 Spring Boot 中正确处理此发布的 ajax 数据。
jQuery/ajax
$("table#pages tbody").sortable({
items: "tr:not(.home)",
placeholder: "ui-state-highlight",
update: function () {
let ids = $("table#pages tbody").sortable("serialize");
let url = "/admin/pages/reorder";
// $.post(url, ids, function (data) {});
$.ajax({
url: url,
method: "post",
data: ids,
beforeSend: function () {
},
complete: function () {
},
success: function (response) {
}
});
}
});
所以从上面看,ids
变量应该是一个名为的数组整数id
,所以我应该在我的请求处理程序中得到类似下面的内容 = int[] id
(单数 id 是正确的)
因此,考虑到上述情况,我尝试在我的请求处理程序方法中执行此操作:
@PostMapping("reorder")
public void reorder(int[] id) {
int count = 1;
Page page;
for (int pageId : id) {
page = pageRepo.getOne(pageId);
page.setSorting(count);
pageRepo.save(page);
count++;
}
}
但是使用断点我可以看到它id
实际上是null
,所以请求处理程序显然没有获取发送的 ajax 数据。
我在 chrome 中得到的错误是:
error: "Internal Server Error"
我尝试@RequestBody
像这样添加到方法参数:
public void reorder(@RequestBody int[] id) {...
但是在这种情况下,它甚至根本没有命中方法中的断点,并且我在 chrome 中收到以下错误:
error: "Unsupported Media Type"
如果我不手动设置内容类型,我会得到以下请求负载
请求有效载荷:
id[]=29&id[]=3
内容类型:
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
我可以将内容类型设置为 json,但是我仍然遇到错误,而且我在其他技术中从来没有这样做过,所以我怀疑这是问题所在。
解决方案
由于有效载荷是id[]=29&id[]=3
,那么您需要
public void reorder(@RequestParam("id[]") int[] id) {
因为id[]
是一个非标准的查询参数名称,不能从id
方法参数名称派生。
推荐阅读
- reactjs - mobx 看不到数据
- python - 如何在 y=x 的函数的一行中编写 plt.scatter(x, y) 函数
- c# - C# - 由另一个数组拆分数组
- javascript - 如何将完整的字符串内容放入js
- sql - 查询表达式中的语法错误(缺少运算符) - 我在哪里将它括起来?
- statsmodels - 阐明用于时间序列预测的 statsmodels AutoReg()、ARMA() 和 SARIMAX()
- django - 无法访问 Django Graphene 中的字段
- python - 网络抓取问题(空列表)
- python - 更改列表列表的元素
- angular - 在继续之前解决 for 循环中的多个承诺