【问题标题】:Getting access to request parameters when contentType is application/json当 contentType 为 application/json 时获取请求参数
【发布时间】:2014-08-03 21:16:25
【问题描述】:

我正在使用以下 jQuery 代码将我的参数发送到我的 Grails 应用程序:

$.ajax({
    url:'<g:createLink controller="myController" action="save"/>',
    data: { name: 'erik' },
    type: 'POST',
    contentType: "application/json", 
    dataType: 'json', 
    success: function(data) {
        // Do something with the request
    }
});

在我的 Grails 应用程序中,我有以下操作:

@Transactional
def save(Speaker speakerInstance) {
    if (speakerInstance == null) {
        notFound()
        return
    }

    if (speakerInstance.hasErrors()) {
        respond speakerInstance.errors, view:'create'
        return
    }

    speakerInstance.save flush:true

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'speakerInstance.label', default: 'Speaker'), speakerInstance.id])
            redirect speakerInstance
        }
        '*' { respond speakerInstance, [status: CREATED] }
    }
}

但是,演讲者的名字没有填写。如果我删除 contentType,代码可以工作,但最终会出现在 'form' 闭包中,我想结束在 '*' 部分。

我尝试使用params.name获取名称,使用request.JSON.name,但没有获取参数,但根据Chrome,参数已发送,当我从请求中删除contentType时,它可以工作。我在这里错过了什么?

【问题讨论】:

    标签: jquery json rest grails


    【解决方案1】:

    您是否尝试在帖子中使用application/json contentType stringify 您的对象?

    data: JSON.stringify({ name: 'erik' }),
    

    【讨论】:

    • 不,我没试过,我今晚试试。谢谢!
    • 谢谢曼努埃尔,它可以工作,但似乎“响应扬声器实例,[状态:创建]”现在不起作用:我得到 404,因为无法呈现 GSP 视图,当然它不应该:它应该呈现 JSON。
    • Grails 通常使用内容协商来确定响应内容类型,但您应该能够强制响应格式:` '*' { 响应扬声器实例,[状态:已创建,格式:['json ']] }`.
    • 它有效,谢谢!但这很奇怪,我认为这不是它应该工作的方式。感谢帮助,至少我可以继续,我稍后会调试这个问题。谢谢!
    猜你喜欢
    • 2013-03-11
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2021-08-22
    • 2018-01-24
    • 2013-05-08
    相关资源
    最近更新 更多