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

cod*_*der 11 jquery spring spring-mvc

这是我的ajax电话:

 $.ajax({
     type: 'GET',
     url: contextPath + '/test/location',
     data: {'objectValues': object.objectValues },
     datatype: 'json',
     success: function( data ) {
     var obj = jQuery.parseJSON( data );
     }
   });
Run Code Online (Sandbox Code Playgroud)

它给了我这个URL:

HTTP://本地主机:8080 /测试/位置objectValues [] = 1234567890&objectValues [] = 0987654321

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

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

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

Nig*_*gel 17

尝试将RequestParam注释值更改为:

@RequestParam(value="objectValues[]", required=false)
Run Code Online (Sandbox Code Playgroud)

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

  • 或者,您可以在 Ajax 调用中设置 `traditional: true`。 (2认同)

tre*_*bor 10

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

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

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

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

$.ajax({
    traditional: true,
    ...  
});
Run Code Online (Sandbox Code Playgroud)

查看更多关于jQuery的AJAX设置traditional设置.

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


Pat*_*cia 0

尝试将 ajaxSettings 设置为传统。

jQuery.ajaxSettings.traditional = true;
Run Code Online (Sandbox Code Playgroud)