Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jqueryajax将数组传递给Spring控制器方法_Spring_Jquery_Spring Mvc - Fatal编程技术网

如何使用jqueryajax将数组传递给Spring控制器方法

如何使用jqueryajax将数组传递给Spring控制器方法,spring,jquery,spring-mvc,Spring,Jquery,Spring Mvc,以下是我的ajax调用: $.ajax({ type: 'GET', url: contextPath + '/test/location', data: {'objectValues': object.objectValues }, datatype: 'json', success: function( data ) { var obj = jQuery.parseJSON( data ); } }); 它给了我

以下是我的ajax调用:

 $.ajax({
     type: 'GET',
     url: contextPath + '/test/location',
     data: {'objectValues': object.objectValues },
     datatype: 'json',
     success: function( data ) {
     var obj = jQuery.parseJSON( data );
     }
   });
它给了我这个URL:

http://localhost:8080/test/location?objectValues[]=1234567890和objectValues[]=0987654321

我的Spring方法签名如下所示:

@RequestMapping(value = "/location", method=RequestMethod.GET)
    public @ResponseBody String loadLocation(@RequestParam(value="objectValues", required=false) String[] objectValues)

为什么objectValues的值总是为null?

尝试将ajaxSettings设置为traditional

jQuery.ajaxSettings.traditional = true;

尝试将RequestParam注释值更改为:

@RequestParam(value="objectValues[]", required=false)

如果这解决了问题,那么这是由于Spring和jQuery之间的参数命名不兼容造成的,jQuery希望将方括号放在其中,以指示参数是数组(我认为PHP也喜欢这样),但Spring并不在意。要查看相反的情况,请尝试将ajax请求的“data”参数设置为字符串:“objectValues=1234567890&objectValues=0987654321”

有多种方法可以做到这一点,具体取决于您认为哪个组件发送或接收的数据格式不正确(或者您有权修改哪个组件)

如果您认为jQuery发送数据的默认方式是正确的,请适当地修改控制器(注意,如果同时使用方法签名和注释,则需要同时更改它们):

如果您认为Spring功能正确,但从jQuery发送的数据不正确,请修改jQuery:

$.ajax({
    traditional: true,
    ...  
});
有关
传统设置的更多信息,请参见


我自己认为修改jQuery发送数据的方式更干净;它使我的控制器语法看起来像我想要的一样。

同样的结果…既然这是你的建议,我可以假设其他一切看起来都是正确的吗?我从未使用过spring,但我在asp.net mvc和jquery方面遇到了麻烦,无法很好地处理数组/对象。将其设置为true会使查询字符串保持不变?或者,您可以在Ajax调用中设置
traditional:true
。。。如果没有
@RequestParam(value=“array[]”
,则在字符串[]参数中设置了NULL。请检查此链接是否有帮助
$.ajax({
    traditional: true,
    ...  
});