【问题标题】:How to pass map from localstorage to controller in spring boot?如何在春季启动中将地图从本地存储传递到控制器?
【发布时间】:2019-05-16 09:00:43
【问题描述】:

我正在尝试使用地图将复选框值保存在本地存储中。这样我就可以使用地图过滤结果。我可以使用 javascript 将地图键值存储在本地存储中。但后来当我检索并将地图从本地存储传递到控制器时,我得到的地图是空值。

这是我的代码

在本地存储中存储地图

$(':checkbox[name=brand]').on('change', function() {
    var assignedTo = $(':checkbox[name=brand]:checked').map(function() {
        return this.id;
    }).get();
    localStorage.setItem('brands', JSON.stringify(assignedTo))
});

本地存储

传递给控制器​​

$.ajax({
    type : "POST",
    url : "filter",
    data : {
        txtMaxAge : localStorage.getItem('txtMaxAge'),
        brands : JSON.parse(localStorage.getItem("brands"))

    }, // parameters
    success : function(result) {
        // alert('changed');
        }
});

控制器

@RequestMapping("/filter")
@ResponseBody
public String filter(
        @RequestParam(value = "txtMaxAge", required = false) String txtMaxAge,
        @RequestParam(value = "brands", required = false) Map<String, String> brands,
        HttpServletRequest request, HttpServletResponse response) {

    System.out.println("max"+txtMaxAge);

    System.out.println("printing map----");

         for (Map.Entry<String,String> entry : brands.entrySet())  
            System.out.println("Key = " + entry.getKey() + 
                             ", Value = " + entry.getValue()); 
    return "send data";
}

我收到了这个错误

max10000000
printing map----
2018-12-15 13:37:59.142  WARN 13672 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver :
Resolved [java.lang.NullPointerException] to ModelAndView: reference to view with name 'error';
model is {errorTitle=Contact Your Administrator!!, errorDescription=java.lang.NullPointerException

我在这里做错了什么?

【问题讨论】:

  • @RequestParam(value = "brands", required = false) Map&lt;String, String&gt; brands改为@RequestParam(value = "brands", required = false) ArrayList&lt;String&gt; brands,
  • @Jai Dixit value = "brands" 如果 brands : ['aaa','bbb'] 在 JS 中将给我们一个 null 品牌。
  • @Jai Dixit @RequestParam(value = "brands", required = false) ArrayList 品牌不工作给出同样的错误。
  • @vidy JSON.parse(localStorage.getItem("brands")) 删除此不解析发送字符串化响应并使用此@RequestParam(value = "brands", required = false) List&lt;String&gt; brands
  • @Jai Dixit 给出同样的错误。

标签: javascript java spring spring-boot


【解决方案1】:

问题是brands不是map类型,它是一个字符串数组。相应地更改类型,它应该可以工作。

【讨论】:

    【解决方案2】:

    尝试更改您的控制器代码:

    @RequestMapping(value = "/filter")
    @ResponseBody
    public String filter(
            @RequestParam(value = "txtMaxAge", required = false) String txtMaxAge,
            @RequestParam(value = "brands[]", required = false) String[] brands,
            HttpServletRequest request, HttpServletResponse response) {
    
        System.out.println("max " + txtMaxAge);
        System.out.println("map " + brands);
    
        return "send data";
    }
    

    【讨论】:

    • @vidy 你试过我的代码了吗?或者只是在您的代码中将value = "brands" 更改为value = "brands[]"?我的代码不能抛出 NullPointerException。
    【解决方案3】:

    如果您真的想要地图中的品牌;这是我的看法。

    这是我的控制器

    @RequestMapping(value = "/filter", method = RequestMethod.POST)
        public String submission(@RequestParam("brands")String brands) {
    
            try {
    
                JSONParser parser = new JSONParser();
                JSONObject ob = (JSONObject)parser.parse(brands);
    
                Map<String,String> mp = new HashMap<>();
                mp.put(ob.keySet().toString(), ob.values().toString());
    
                for(Map.Entry<String,String> entry : mp.entrySet()) {
    
                    System.out.println("Key = " + entry.getKey() + 
                            ", Value = " + entry.getValue().toString()); 
                }
    
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
            return "home";
        }
    

    这是我的 ajax 调用,

    $.ajax({
      type: "POST",
      url: "${pageContext.request.contextPath}/Submit",
      data: {
    
          brands: localStorage.getItem("brands")
      },
      success : function() {
           console.log('done');
      }
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-28
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多