从PHP应用程序调用grails控制器,它以JSON格式发送数据。
当我打印params
时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)
如何将其转换为检索参数值?
或有没有办法将其转换为地图,以便我可以轻松访问参数?
答案 0 :(得分:6)
[{"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
试试这个..,。
答案 1 :(得分:5)
如果是POST请求,则可以从request
request.JSON
request.JSON.courseCategory
等
从请求中看到的是从客户端发送值null
的内容。验证有效负载。
答案 2 :(得分:3)
如果有人遇到调用request.JSON
并收到空的问题 - 请确保明确设置dataType
和contentType
,并将数据作为JSON发送。例如,使用jQuery:
$.ajax({
url: yourURL,
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify(yourJsonObject)
});
答案 3 :(得分:0)
看看JsonSlurper。如您所见,首先需要解析JSON文件,然后在属性访问表示法中访问JSON中的所有字段。
答案 4 :(得分:-1)
Grails会自动解析/解组JSON,您可以通过控制器中的request.JSON访问它。返回的对象是JSONObject类型,它允许对属性进行地图样式访问。您也可以直接使用此JSONObject进行数据绑定
def jsonObject = request.JSON
def instance = new YourDomainClass(jsonObject)
答案 5 :(得分:-2)
def jsonObject = request.JSON def实例= new YourDomainClass(jsonObject)/ extensions / default {“ sitekey”:“ your_site_key”,“ theme”:“ light”}。