Grails Groovy HTTPBuilder POST:缺少方法

Grails Groovy HTTPBuilder POST:缺少方法,grails,post,groovy,httpbuilder,Grails,Post,Groovy,Httpbuilder,我正在为一个与Last.fm集成的非常基本的Grails应用程序打基础。我被用户身份验证卡住了,在那里我得到了会话密钥。从文档中可以看出,这听起来像是一篇非常简单的HTTP文章,格式如下所示。我已经尝试了HTTPBuilder的post和request(post)的每一种变体,但都出现了如下错误: | Server running. Browse to http://localhost:8080/GroovyLastFM | Error 2013-05-14 19:57:10,042 [http

我正在为一个与Last.fm集成的非常基本的Grails应用程序打基础。我被用户身份验证卡住了,在那里我得到了会话密钥。从文档中可以看出,这听起来像是一篇非常简单的HTTP文章,格式如下所示。我已经尝试了HTTPBuilder的post和request(post)的每一种变体,但都出现了如下错误:

| Server running. Browse to http://localhost:8080/GroovyLastFM
| Error 2013-05-14 19:57:10,042 [http-bio-8080-exec-3] ERROR errors.GrailsExceptionResolver  - MissingPropertyException occurred when processing request: [GET] /GroovyLastFM/RecentSongs/tokenChecker - parameters:
token: 452b5619f98e3b66cec11b61940af500
No such property: Method for class: GroovyLastFM.User. Stacktrace follows:
Message: No such property: Method for class: GroovyLastFM.User
Line | Method
->>   28 | getSession in GroovyLastFM.User
我不知道我还需要导入什么,但显然缺少一些东西这就是grails插件的用武之地吗?如果是这样,我需要在应用程序级别包括哪些内容才能使HTTPBuilder正常工作?我对grails非常陌生,不确定哪些内容值得添加到依赖项中,或者如何添加。另外,我使用的是Grails2.1.1,没有使用IDE。谢谢

package GroovyLastFM

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0-RC2' )
import java.security.MessageDigest
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

class User {
String token
String api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
String secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

User (String token) {
    this.token = token
    getSession()
}

def getSession() {
    String signature = md5("api_key" + api_key + "methodauth.getSessiontoken" + token + secret)
    def postbody = [token:token, api_key:api_key, method:'auth.getSession', api_sig:signature]
    def http = new HTTPBuilder("http://wx.audioscrobbler.com/2.0/")
    http.request(Method.POST) {req->
        headers.accept = "application/xml"
        requestContentType = ContentType.URLENC
        body = postbody
        response.success { resp,xml->
            // read xml response
        }
    }   
}
我还尝试了一个基本的curl post,以确保我的参数是正确的,它确实像我预期的那样返回了会话密钥:

curl -X POST -d "token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&method=auth.getSession&api_sig=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" http://ws.audioscrobbler.com/2.0/
链接:

  • Last.fm API:
  • 我的前一篇文章是:
  • HTTPBuilder Post文档:

您正在导入
groovyx.net.http.Method.*
并使用
Method.POST
,这就是为什么
没有这样的属性:Method

替换为:

http.request(POST) { req ->  ... }
。。。这样就可以了

或者,您也可以将导入更改为:

import static groovyx.net.http.Method

然后继续使用
Method.POST

您正在导入
groovyx.net.http.Method.*
并使用
Method.POST
,这就是为什么您没有得到
这样的属性:Method

替换为:

http.request(POST) { req ->  ... }
。。。这样就可以了

或者,您也可以将导入更改为:

import static groovyx.net.http.Method

并继续使用
方法。POST

确实如此!我知道我必须接近:)谢谢。那么method.*是什么意思?当然!知道我必须接近:)谢谢。那么方法。*是什么意思?