gpt4 book ai didi

javascript - 如何将数字映射到数字?

转载 作者:行者123 更新时间:2023-11-30 19:57:47 25 4
gpt4 key购买 nike

任务是保存重新排序的项目列表。

我的方法是将它们收集在一个稀疏数组中,进行字符串化并发布到服务器,在那里它们应该被解析并映射到 DTO 字段,并在 Spring MVC Controller 中进行处理。但是我的代码不起作用。请看一下。

前端代码:

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 到 0、5 到 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 parse error: Cannot deserialize instance of java.util.LinkedHashMap out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.LinkedHashMap out of START_ARRAY token\n at [Source: (PushbackInputStream);

对于项目重新排序的用户体验,我使用 jsGrid + jQuery UI Sortable插件。

最佳答案

你得到这个 Exception因为在你的后台 mapHashMap/Map<Integer, Integer>你正在传递 array ,而数组不是 key/value按预期配对数据结构。

这里的解决方案是传递一个 object而不是 array ,因此在您的 JavaScript 端只需更改 items声明为 object :

var items = {};

您将拥有预期的数据类型。

关于javascript - 如何将数字映射到数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53745333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com