如何使用jqueryajax将数组传递给Spring控制器方法
以下是我的ajax调用:如何使用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({
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,
...
});