【发布时间】:2018-12-12 14:34:46
【问题描述】:
任务是保存重新排序的项目列表。
我的方法是将它们收集在一个稀疏数组中,将它们字符串化并发布到服务器,在那里它们应该被解析并映射到 DTO 字段,并在 Spring MVC 控制器中进行处理。但是我的代码不起作用。请看一下。
前端代码:
var items = [];
$.each($gridData.find("tr"), function (index, row) {
items[$(row).data("JSGridItem").id] = index;
});
console.log("items", items);
// prints to console:
// items (6) [empty × 4, 0, 1]
// 4: 0
// 5: 1
$.post({
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: JSON.stringify({
map: items
}),
url: "/items/reordering"
});
请求负载示例:map: [null, null, null, null, 0, 1]。由此我希望在后端得到一张 {4 to 0, 5 to 1} 的地图。
后端代码
@lombok.Data
public class ItemsOrderingDto {
/** map of ID to order */
@NotEmpty
private Map<Integer, Integer> map = new HashMap<>();
}
@PostMapping("/items/reordering")
public ResponseEntity changeOrder(
@RequestBody @Valid ItemsOrderingDto itemsOrdering
) {
// ... save new order
return ResponseEntity.ok().build();
}
但我收到错误 400 - 错误请求。
“JSON 解析错误:无法从 START_ARRAY 令牌中反序列化
java.util.LinkedHashMap的实例;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从 START_ARRAY 令牌中反序列化java.util.LinkedHashMap的实例\n 在 [来源:(PushbackInputStream);
对于重新排序 UX 的项目,我使用 jsGrid + jQuery UI Sortable 插件。
【问题讨论】:
-
将您的
items变量声明为object,就像这样var items = {};。 -
@chŝdk 你的建议是正确的;我一分钟前自己修好了。请发表您的评论作为答案。
标签: javascript java jquery spring-mvc spring-boot