【问题标题】:Howto get a map from params in Grails Controller?如何从 Grails Controller 中的参数获取地图?
【发布时间】:2013-05-17 02:44:12
【问题描述】:

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

例如,假设这是一个“复杂”的 JSON 对象(元对象中的项目数是可变的,可以是一、二、三……并带有变量名):

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

当这个对象通过 jQuery 发送时,在控制器中我在 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
});

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

如果我尝试在控制器中执行 params.meta,我会得到一个空对象。 我应该如何从 params 对象中检索地图?

【问题讨论】:

  • 如何在客户端发送这个对象?
  • 查看我编辑的问题

标签: grails map params grails-2.2


【解决方案1】:

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

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

并以request.JSON 的身份进入服务器端,请参阅文档: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)

【讨论】:

  • 谢谢,第二个选项效果很好!我希望有一种直接的方法,类似于 params.getMap() 就像有一个 params.getList(),但我想这个选项是可以的,并且不会引入太多的手动转换(这是我的另一个选项,做手动)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 2016-09-17
  • 1970-01-01
相关资源
最近更新 更多