我正在尝试将JSON数组接受到命令对象中。该数组如下所示:
[
{prop1:'a', 'prop2:'b', prop3:'c'},
{prop1:'d', 'prop2:'e', prop3:'f'},
{prop1:'g', 'prop2:'h', prop3:'i'},
...
]
我试图通过懒惰列表接受数组
class MyCommand {
List myList = ListUtils.lazyList([], FactoryUtils.instantiateFactory(Map))
}
但是我收到以下错误:
InstantiateFactory: The constructor must exist and be public . Stacktrace follows:
Message: InstantiateFactory: The constructor must exist and be public
Line | Method
->> 113 | findConstructor in org.apache.commons.collections.functors.InstantiateFactory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 86 | <init> in ''
| 67 | getInstance . . . in ''
| 121 | instantiateFactory in org.apache.commons.collections.FactoryUtils
接受地图数组的正确语法是什么?
我通过remoteFunction
发送数据,如下所示:
var params = '{"myList":' + JSON.stringify(myList) + '}';
${remoteFunction(controller: 'myController', action: 'myAction',
params: 'params', onSuccess: 'callback(data)')};
我应该使用不同的方法吗?
答案 0 :(得分:1)
您不需要在命令对象中使用惰性列表。您可以简化代码,让内置数据绑定系统懒惰地初始化List
。
// grails-app/controllers/demo/DemoController.groovy
package demo
class DemoController {
def demo(MyCommand co) {
[command: co]
}
}
class MyCommand {
List<Map> data
}
您可以使用看起来像这样的JSON向该操作发送请求...
{"data": [
{prop1:'a', 'prop2:'b', prop3:'c'},
{prop1:'d', 'prop2:'e', prop3:'f'},
{prop1:'g', 'prop2:'h', prop3:'i'},
...
]}
当您这样做时,数据绑定系统将创建MyCommand
的实例,它会将data
属性初始化为空List
,然后填充{{1}使用JSON中表示的所有List
。
该代码位于https://github.com/jeffbrown/listofmaps的项目中。该项目包括以下测试:
Maps
答案 1 :(得分:0)
Map
是一个接口,因此您无法实例化它。您需要选择要使用的具体类型,例如HashMap
或LinkedHashMap
。