6

从 PHP 应用程序调用 grails 控制器,它以 JSON 格式发送数据。

当我打印参数时

println params 

哪个打印

[{"courseCategory":null,"courseId":null,"show":null,
    "rows":6,"trainers":null,"courses":null,"cities":null,
    "fromDate":null,"toDate":null,"pageType":"HOME","deal":null}:,   
    action:getTrainingsAsJson, 
    controller:publicTraining]

当我做

println  params.rows
println params.pageType

哪个打印null

我试过了

  def jsonObject = request.JSON  // prints [:]

我也试过JsonSlurper

def slurper = new JsonSlurper()
def result = slurper.parseText(params)

这给出了错误

No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap)

如何将其转换为检索参数值?

或者有什么方法可以将其转换为地图,以便我可以轻松访问参数?

4

6 回答 6

9

如果是 POST 请求,则可以从以下位置检索requestJSON

request.JSON
request.JSON.courseCategory

ETC

从请求中看到的值是null从客户端发送的。验证有效载荷。

于 2013-10-03T14:11:25.743 回答
7
[{"courseCategory":null,...,"deal":null}:, action:getTrainingsAsJson,  controller:publicTraining]

看起来您正在发送没有密钥的数据,例如

data: JSON.stringify({"courseCategory":null,...,"deal":null}),

用一些钥匙发送它

jQuery.ajax({
    url: '${g.createLink(action: 'asd')}',
    type: 'post',
    dataType: 'json',
    data: "sendData=" + JSON.stringify({"courseCategory":null,"courseId":null,"show":null, "rows":6,"trainers":null,"courses":null,"cities":null, "fromDate":null,"toDate":null,"pageType":"HOME","deal":null}),
    success: function (data) {
        console.debug(data);
    }
});

然后得到像

def data = JSON.parse(params.sendData)
def rows = data.rows

尝试这个..,。

于 2013-10-03T18:32:07.113 回答
4

如果有人在调用和接收 null 时遇到问题request.JSON- 请确保您明确设置dataTypeand contentType,并将数据作为 JSON 发送。例如,使用 jQuery:

$.ajax({
    url: yourURL,
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    data: JSON.stringify(yourJsonObject)
});
于 2015-03-02T19:16:01.640 回答
0

看看JsonSlurper。正如您将看到的,您首先需要解析 JSON 文件,然后以属性访问表示法从 JSON 访问所有字段。

于 2013-10-03T14:10:37.597 回答
-1

Grails 会自动解析/解组 JSON,您可以通过控制器中的 request.JSON 访问它。返回的对象是 JSONObject 类型,它允许以地图样式访问属性。也可以直接使用这个 JSONObject 进行数据绑定

def jsonObject = request.JSON
def instance = new YourDomainClass(jsonObject)
于 2013-10-03T14:20:37.483 回答
-2

def jsonObject = request.JSON def instance = new YourDomainClass(jsonObject)/extensions/default{"sitekey": "your_site_key", "theme": "light"}。 

于 2018-08-14T03:03:48.170 回答