代码之家  ›  专栏  ›  技术社区  ›  Sumit

如何将javascript(js)映射传递给spring boot Controller?

  •  4
  • Sumit  · 技术社区  · 7 年前

    我有一个Java脚本映射,其中包含需要发送到spring boot Controller的键值对:--

    例如:--

     var myMap = new Map();
         myMap.set('1', 'value1');
         myMap.set('2', 'value2');
        

    我无法在spring boot控制器中获取此JavaScript(js)映射。 根据我的最佳实践,我试图在java的HashMap或map中获得这个映射。 非常感谢您的帮助。:)

    3 回复  |  直到 7 年前
        1
  •  2
  •   Amit K Bist    7 年前

    请尝试以下内容:

    var myMap = {};
    myMap["names"] = ["Alex"];
    myMap["fruit"]  = ["Apple"];
    

    修改javascript代码以使用Ajax:

    $.ajax({
         type : "POST",
         url :  "/reqURL",
         contentType: "application/json",
         data : JSON.stringify(myMap) // .....
    

    控制器代码如下:

     @RequestMapping(value = "/reqURL", method = RequestMethod.POST, consumes="application/json")
        @ResponseBody
        public List<String> reqControl(@RequestBody Map<String, List<String>> myMap) {
           // do something with parameters ...
        }
    
        2
  •  0
  •   Sumit    7 年前

    我已经想出了解决办法:-

    var myMap = new Map();
             myMap.set('1', 'value1');
             myMap.set('2', 'value2');
             myMap.set('3', 'value3');
             myMap.set('4', 'value4');
    
             //Making JS Map compatible for JSON.Stringify
             const out = Object.create(null)
             myMap.forEach((value, key) => {
              if (value instanceof Map) {
                out[key] = map_to_object(value)
    
              }
              else {
                out[key] = value
              }
            })
    

    $.ajax({
         type : "POST",
         url :  "/yourURL",
         contentType: "application/json",
         data : JSON.stringify(myMap) //......
    

    @RequestMapping(value = "/yourURL", method = RequestMethod.POST, consumes="application/json")
        @ResponseBody
        public List<String> reqControl(@RequestBody Map<String,<String> myMap) {
           //  further code.   
        }
    
        3
  •  0
  •   elenamf86    3 年前

    在我的例子中,我将地图传递给一个servlet,但也许它可以帮助某人:


        $.ajax({
        ...
        data: { 
         "MY_MAP": JSON.stringify(Object.fromEntries(myMap))
        },
        ...
    

    String myMapString = parameters.get("MY_MAP");
    Map<String, String> myMap = new Gson().fromJson(myMapString, new TypeToken<HashMap<String, String>>() {}.getType());