【问题标题】:How to pass a javascript (js) Map to spring boot Controller?如何将javascript(js)映射传递给spring boot Controller?
【发布时间】:2018-11-03 16:22:03
【问题描述】:

我有一个包含键值对的 Java Script 映射,我需要将其发送到 Spring Boot 控制器:--

示例:--

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

我无法在我的 Spring Boot 控制器中获取此 JavaScript (js) 映射。 根据我的最佳实践,我试图在 java 的 HashMap 或 Map 中获取此地图。 高度赞赏帮助。 :)

【问题讨论】:

  • 将其转换为 JSON 并通过 AJAX 发布..

标签: javascript spring spring-mvc spring-boot


【解决方案1】:

试试下面:

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 ...
    }

【讨论】:

  • 非常感谢 Amit 的回复,上述建议绝对正确但是,JSON.stringify 无法正常工作,因为它正在打印——浏览器控制台和 spring 控制器上的“{}”(“{ }") .
  • {} 怎么来,JSON 结构需要用{} 括起来,分享一个示例 JSON,Spring Controller 是否在抱怨无法转换为 aMap?
  • 此解决方案有效/无效!!地图的处理方式不同。
【解决方案2】:

我已经找到了解决方案:-

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.   
    }

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多