我正在为一个与Last.fm集成的非常基本的Grails应用程序奠定基础。我坚持使用用户身份验证,我获得会话密钥。从文档中,它听起来像一个非常简单的HTTP POST,我在下面的代码格式。我已经尝试了HTTPBuilder的帖子和请求(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非常新,并且不确定依赖项的添加或者如何执行它的优点。此外,我在Grails 2.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 -X POST -d "token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&method=auth.getSession&api_sig=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" http://ws.audioscrobbler.com/2.0/
链接:
答案 0 :(得分:4)
您正在导入groovyx.net.http.Method.*
并使用Method.POST
,这就是您获得No such property: Method
的原因。
将其替换为:
http.request(POST) { req -> ... }
......应该这样做。
或者,您也可以将导入更改为:
import static groovyx.net.http.Method
并继续使用Method.POST
。