grails - 如何从Grails Controller中的参数获取 map ?

标签 grails map params grails-2.2

我试图在 Controller 中检索从客户端(通过ajax)以JSON格式发送的复杂对象,但是我不知道如何从参数中获取转换了某些属性的 map 。

例如,假设这是“复杂的” JSON对象(元对象中的项目数是可变的,可以是1、2、3 ...,并且具有变量名):

{ 
  language: "java",
  meta: {
      category: "category1"
  }
}

当通过jQuery发送此对象时,在 Controller 中,我在params对象中得到了这个:
[language:java, meta[category]:category1, action: register, controller: myController]

这就是我通过jQuery发送对象的方式。我有几个通话的常用功能:
if (!params) params = {};

var url = this.urls.base+"/"+controller+"/"+action+"?callback=?";
if (params.callback)
    url = this.urls.base+"/"+controller+"/"+action+"?callback="+params.callback;
url = url + "&_"+new Date();
delete params.callback;
$.ajax({
    url: url,
    data: params,
    crossDomain:true,
    dataType:'jsonp',
    cache:false,
    ajaxOptions: {cache: false},
    jsonp: params.callback?false:true
});

并在我发送的ajax调用的参数中测试我之前编写的JSON对象

如果我尝试在 Controller 中执行params.meta,则会得到一个空对象。
我应该如何从params对象检索 map ?

最佳答案

在客户端,您必须使用POST方法发送数据,并配置jQuery以将其作为JSON发送。喜欢:

data = { 
  language: "java",
  meta: {
      category: "category1"
  }
}
$.ajax({
  type: 'POST',
  data: JSON.stringify(data),
  contentType: 'application/json',
})

并以request.JSON的身份进入服务器端,参见docs:http://grails.org/doc/2.2.0/ref/Servlet%20API/request.html

但是,如果您需要发出跨域请求,则POST方法将不起作用。在这种情况下,您可以将复杂对象作为参数传递,并从字符串在服务器上进行解析。喜欢:
$.ajax({
  data: {myjson: JSON.stringify(data)}
})

和:
def myjson = JSON.parse(params.myjson)

关于grails - 如何从Grails Controller中的参数获取 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16685146/

相关文章:

java - 有没有一种好方法可以让 Map<String, ?> 忽略大小写?

scala - 在 Scala 中将 Map[String, String] 转换为 Map[String, Int]

forms - 在grails单元测试中模拟表单

grails - grails 中不可预测的 "Could not synchronize database state with session"异常

grails - 如何从命令行覆盖.grails文件夹的默认位置?

grails - 如何安装 gradle-grails-plugin?

jquery - Fancybox Youtube参数cc_lang_pref不起作用?

grails - 域对象上的 Class.forName newInstance 不是来自 grails 外部的 GroovyObject

multithreading - 使用互锁增量来增量STL映射的value字段。它是线程安全的吗?

angularjs - Angular 测试使用 RouteParams 的 Controller