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

时间:2011-04-01 16:37:23

标签: 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 );
     }
   });

它给了我这个网址:

的http://本地主机:8080 /测试/位置objectValues [] = 1234567890&安培; objectValues [] = 0987654321

My Spring方法签名如下所示:

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

为什么我一直为objectValues的值保持null?

3 个答案:

答案 0 :(得分:17)

尝试将RequestParam注释值更改为:

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

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

答案 1 :(得分:10)

有多种方法可以执行此操作,具体取决于您认为以错误格式发送或接收数据的组件(或您有权修改的组件)。

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

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

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

$.ajax({
    traditional: true,
    ...  
});

有关traditional设置的详情,请参阅jQuery AJAX settings

我自己认为修改jQuery发送数据的方式更为清晰;它使我的Controller语法看起来像我想要的那样。

答案 2 :(得分:0)

尝试将ajaxSettings设置为传统。

jQuery.ajaxSettings.traditional = true;