Groovy HTTPBuilder POST: отсутствует метод (ы)
Я закладываю основу для очень простого приложения Grails, которое интегрируется с Last.fm. Я застрял в аутентификации пользователя, где я получаю сеансовый ключ. Из документации это звучит как очень простой 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, чтобы убедиться, что мои параметры верны, и она вернула ключ сессии, как я и ожидал:
curl -X POST -d "token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&method=auth.getSession&api_sig=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" http://ws.audioscrobbler.com/2.0/
Ссылки:
- API Last.fm: http://www.last.fm/api/webauth
- Предыдущий пост, на котором я строил: HTTPBuilder HTTP Post URL закодировал параметры и принимал ответ xml?
- HTTPBuilder Post Doc: http://groovy.codehaus.org/modules/http-builder/doc/post.html
1 ответ
Вы импортируете groovyx.net.http.Method.*
и используя Method.POST
вот почему вы получаете No such property: Method
,
Заменить его на:
http.request(POST) { req -> ... }
... это должно сделать.
В качестве альтернативы вы также можете изменить импорт на:
import static groovyx.net.http.Method
и продолжать использовать Method.POST
,