【问题标题】:Send list of Integer[] from ajax to Spring Controller将 Integer[] 列表从 ajax 发送到 Spring Controller
【发布时间】:2019-01-15 02:43:26
【问题描述】:

我正在尝试将一些数据从前端发送到 Spring 中的控制器。我能够恢复除 Integer [] objectIds 之外的所有数据。

这是我的 ajax 函数:

           var dataToSend = [{ objectIds: 111 }, { objectIds: 222 }];
           dataToSend = JSON.stringify({ 'objectIds': dataToSend });

           $.ajax({
               type:'POST',
               url:'/sendData',
               data:{'start':start, 'end':end, 'locale':locale, dataToSend},
               async:false,
               dataType: "json",
               success:function(data){}
           });

这是我的控制器功能:

    @PostMapping(path="/sendData")
public @ResponseBody String sendData(HttpServletResponse response, 
        @RequestParam(required=true, name="start") String start, 
        @RequestParam(required=true, name="end") String end,
        @RequestParam(required=true, name="locale") Locale locale,
        @RequestParam(required=false, name="objectIds") Integer[] objectIds) throws DocumentException, IOException {

    //some more code
}

知道为什么它不起作用吗??

【问题讨论】:

    标签: javascript ajax spring post model-view-controller


    【解决方案1】:

    问题在于您发送 JSON 的方式

    案例 1:您的发送方式

     var dataToSend = [{ objectIds: 111 }, { objectIds: 222 }];
    dataToSend = JSON.stringify({ 'objectIds': dataToSend });
    
    var mainJSOn = {
        'start': "start",
        'end': "end",
        'locale': "locale",
        dataToSend
      }
      console.log(JSON.stringify(mainJSOn));
    

    输出:

       {"start":"start","end":"end","locale":"locale","dataToSend":"{\"objectIds\":[{\"objectIds\":111},{\"objectIds\":222}]}"}
    

    案例 2:您应该如何实际发送

        var dataToSend1 = [{ objectIds: 111 }, { objectIds: 222 }];
        dataToSend1 = JSON.stringify(dataToSend1 );
    
        var mainJSOn1 = {
            'start': "start",
            'end': "end",
            'locale': "locale",
            'objectIds': dataToSend1
          }
    
    
    
      console.log(JSON.stringify(mainJSOn1));
    

    输出:

    {"start":"start","end":"end","locale":"locale","objectIds":"[{\"objectIds\":111},{\"objectIds\":222}]"}
    

    查看两种情况的输出。

    像案例 2 中所做的那样更改您的代码

    Working Fiddle

    【讨论】:

    • 谢谢 Ashish Kumar 我肯定是以错误的方式形成 json
    【解决方案2】:

    您正在对错误的对象进行字符串化并将密钥 objectIds 埋在其中

    试试改成

    var dataToSend = JSON.stringify([{objectIds: 111}, {objectIds: 222}]);    
    
    $.ajax({
      type: 'POST',
      url: '/sendData',
      data: {
        'start': start,
        'end': end,
        'locale': locale,
        'objectIds': dataToSend
      },
      // async:false,  // NEVER USE THIS!!!!
      dataType: "json",
      success: function(data) {}
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多