Play Framework和jQuery Ajax请求,数据为Array

我通过jQuery使用Play Framework后端通过Ajax发送一个值数组,我遇到了问题。

这是一个例子:

$.ajax ({ 'type': 'POST', 'url': '/url', 'timeout': 5000, 'data': {'ids': [0, 1, 2, 3]}, 'dataType': 'json', 'success': function (oData) { // Process ... } }); 

但是在Play!中,如果我做了一个params.get("ids"); ,我得到一个空值,如果我做了一个params.getAll("ids"); 也。

我知道问题出在哪里,jQuery将数据发送为: ids[]=0&ids[]=1&ids[]=2&ids[]=3但是播放! 框架期望数组数据以ids=0&ids=1&ids=2&ids=3

是否有正确的方法来正确发送数据(或将数据作为控制器中的数组获取)?

到目前为止,我设法使其工作简单但在javascript中手动创建请求为String。

谢谢你的帮助。

一种方法(保持JavaScript代码完整)只是声明你的控制器方法如下:

 public static void myMethod(@As("ids[]:")List ids) { System.out.println(ids.get(0)); } 

..输出是你所期望的:

[0, 1, 2, 3]

我不确定是否有更简单的方法,但你可以发送一个字符串并使用GSON解码,即:

 $.ajax ({ 'type': 'POST', 'url': '/url', 'timeout': 5000, 'data': {'ids': '[0, 1, 2, 3]'}, 'dataType': 'json', 'success': function (oData) { // Process ... } }); 

在控制器中,您可以将字符串转换为数组:

 // data would be "[0, 1, 2, 3]" int[] intArray = gson.fromJson(data, int[].class); 

这个解决方案对我有用。 试试看,

 // Sending request var params = { myArray: [1, 2, 3, 4] }; var url = '@controllers.routes.AppController.jquery()'; $.post(url, params, function (data) { // Process response here }); // Receiving request Map params = request().body().asFormUrlEncoded(); Logger.debug("Params : " + params.size()); for (Map.Entry param : params.entrySet()) { Logger.debug(param.getKey() + " = " + param.getValue()[0]); }