I was frustrated as hell today finding examplesonhowtouseHTTPBuilder to perform a simple POST and GET request in my Grails application.
I now have something that I can use. This code has a dependency on groovyx.net.http libraries. This is available without even thinking by including the Rest Plugin into your app.
grails-app/conf/BuildConfig.groovy
1234
plugins{...runtime":rest:0.7"...
Here’s the code. I placed it in /src/groovy/com/berry/utils/ApiConsumer.groovy
packagecom.berry.utilsimportgroovyx.net.http.HTTPBuilderimportgroovyx.net.http.ContentTypeimportgroovyx.net.http.Methodimportgroovyx.net.http.RESTClientclassApiConsumer{staticdefpostText(StringbaseUrl,Stringpath,query,method=Method.POST){try{defret=nulldefhttp=newHTTPBuilder(baseUrl)// perform a POST request, expecting TEXT responsehttp.request(method,ContentType.TEXT){uri.path=pathuri.query=queryheaders.'User-Agent'='Mozilla/5.0Ubuntu/8.10Firefox/3.0.4'// response handler for a success response coderesponse.success={resp,reader->println"response status: ${resp.statusLine}"println'Headers:-----------'resp.headers.each{h->println" ${h.name} : ${h.value}"}ret=reader.getText()println'Responsedata:-----'printlnretprintln'--------------------'}}returnret}catch(groovyx.net.http.HttpResponseExceptionex){ex.printStackTrace()returnnull}catch(java.net.ConnectExceptionex){ex.printStackTrace()returnnull}}staticdefgetText(StringbaseUrl,Stringpath,query){returnpostText(baseUrl,path,query,Method.GET)}}
With this new class, we can easily perform requests.
123456789
defurl="http://myexample.com"defpath="/path/to/api"defquery=[firstName:"Eric",lastName:"Berry",email:"cavneb@gmail.com"]// Submit a request via GETdefresponse=ApiConsumer.getText(url,path,query)// Submit a request via POSTdefresponse=ApiConsumer.postText(url,path,query)