Из того, что я искал и нашел, это очень хорошо, возможно, будет невозможно, но любая помощь будет оценена.
У меня есть контроллер пружины, который принимает созданное мной DTO, и один из атрибутов - этоКарта.На моей html-странице я пытаюсь связать карту со страницы в JSON, но единственный способ сделать это - преобразовать карту в массив.Это приводит к сбою десериализации из-за несовместимых типов.
EG
Контроллер:
@PostMapping("/mapping")
public ResponseEntity addThing(@Validated @RequestBody Dto dto, BindingResult result){
//Do some stuff
}
Dto:
public class Dto {
...
private Map<Integer, String> map;
...
}
Javascript:
...
var map = new Map();
$("#mapBody tr").map(function () {
var value = $(this).find( "input[name=value]").val();
var index = $(this).find("input[name=index]").val();
map.set(index, value);
});
...
var data = {
//other values
"map": Array.from(map.entries()), //This is what I have found so far but
//this is what I believe needs to be changed
//Some more values
}
...
$.ajax({
url: "/mapping",
type: "POST",
data: JSON.stringify(data),
...
});
Как упоминалось выше,изменение в массив делает десериализацию неудачной, но в противном случае stringify превращает карту в просто: {}, я знаю, что это ожидаемое поведение.
Есть ли в любом случае, я могу изменить это, чтобы заставить его делать то, что я хотел быкак это?
РЕДАКТИРОВАТЬ: Это результат stringify с Array.from ()
"{
//values
"map":[["0","value"],["1","another value"],["2","third value"]],
//more values
}"
И, как я упоминал выше, если я просто использую "map": mapтогда результирующий разбор будет "map": {}