javascript - 使用嵌套映射的 JSON 对象反序列化,Java Spring

标签 javascript java json spring spring-boot

根据我的搜索和发现,这可能不太可能,但我们将不胜感激。

我有一个 spring Controller ,它接受我创建的 DTO,其中一个属性是 Map。在我的 html 页面上,我试图将页面中的 map 捆绑到 JSON 中,但我发现这样做的唯一方法是将 map 转换为数组。这会导致反序列化因类型不兼容而失败。

例如

Controller :

@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 会使映射变为:{},我知道这是预期的行为。

无论如何我可以改变它来让它做我想做的事吗?

编辑: 这是使用 Array.from() 进行字符串化的结果

"{
  //values
  "map":[["0","value"],["1","another value"],["2","third value"]], 
  //more values
 }"

就像我上面提到的,如果我只使用 "map":map 那么解析结果就是 "map":{}

最佳答案

我只是想了一下你的问题。我们无法序列化 JS Map()正确 ( Problems with JS map serialization ),所以我的介词是以这种方式更改您的代码:

...
var map = {}; // using object instead of map 
$("#mapBody tr").map(function () {
     var value = $(this).find( "input[name=value]").val();
     var index = $(this).find("input[name=index]").val();
     map[index] = value; // setting property of object
});
...
var data = {
//other values
"map": map, // using map object instead of array
//Some more values
}
...
$.ajax({
   url: "/mapping",
   type: "POST",
   data: JSON.stringify(data),
   ...
});

因此生成的 JSON 如下所示:

'{"id":1,"map":{"1":"val1","2":"val2","3":"val3"},"otherProperty":"otherValue"}'

这个可以用 HashMap<Integer, String> map 解析为 DTO里面。请尝试一下,如果有效请告诉我。

关于javascript - 使用嵌套映射的 JSON 对象反序列化,Java Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53561120/

相关文章:

javascript - jQuery 验证码匹配

javascript - Array.every() - 可以在回调中返回吗?

java - 无法获得显示错误的响应

javascript - 如何解析对象的字符串?

javascript - jquery中如何延迟焦点事件?

javascript - 压缩 Jquery 更干净

java - 需要理解

java - JAVA中函数重载的困惑

php - 如何用jquery检查json数据返回是否为空

c++ - 获取节点在rapidjson中的偏移量?