Задача состоит в том, чтобы сохранить переупорядоченный список элементов.
Мой подход состоит в том, чтобы собрать их в разреженный массив, преобразовать в строку и отправить на сервер, где они должны быть проанализированы и сопоставлены с полем 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 к 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: невозможно десериализовать экземпляр java.util.LinkedHashMap
из маркера START_ARRAY; вложенное исключение - com.fasterxml.jackson.databind.exc.MismatchedInputException: Невозможно десериализовать экземпляр java.util.LinkedHashMap
изтокена START_ARRAY \ n в [Source: (PushbackInputStream);
Для переупорядочивания элементов UX я использую jsGrid + jQuery UI Sortable плагин.