2013-08-28 3 views
1

Ну, я новичок в Groovy/Grails. Я написал сценарий Groovy, который использует RESTClient для запроса HTTP POST на сервер JIRA. Запрос POST отправляет JQL-запрос и получает результат в формате JSON. Вот полный код:Ссылка на Groovy для приложения Grails

import groovyx.net.http.RESTClient; 
import groovyx.net.http.HttpResponseDecorator; 
import org.apache.http.HttpRequest; 
import org.apache.http.protocol.HttpContext; 
import org.apache.http.HttpRequestInterceptor; 
import groovy.json.JsonSlurper; 
import static groovyx.net.http.Method.* 
import static groovyx.net.http.ContentType.* 

@Grab(value = 'org.codehaus.groovy:groovy-all:2.1.6', 
     initClass = false) 
@Grapes([ 
@Grab(group = 'org.codehaus.groovy.modules.http-builder', 
     module = 'http-builder', version = '0.5.2'), 
@GrabExclude('org.codehaus.groovy:groovy') 
]) 

// connect to JIRA 
def jiraApiUrl = 'http://my-jira.com/rest/api/2/' 
def jiraClient = new RESTClient(jiraApiUrl); 

// authentication 
def basic = 'Basic ' + 'username:password'.bytes.encodeBase64().toString() 
jiraClient.client.addRequestInterceptor (
new HttpRequestInterceptor() { 
    void process(HttpRequest httpRequest, 
       HttpContext httpContext) { 
         httpRequest.addHeader('Authorization', basic) 
     } 
    }) 

// http post method 
def uriPath = 'search' 
def param = [maxResults : 1, jql : '<jql-query>'] 

def Issues = jiraClient.post(requestContentType : JSON, path : uriPath, body : param) 

def slurpedIssues = new JsonSlurper().parseText(Issues.data.toString()) 

println Issues.data.total 

Мне нужно перенести этот скрипт в приложение Grails. Любые предложения относительно того, как сделать то же самое?

ответ

1
  1. Определение зависимостей в BuildConfig (за исключением заводной зависимости)
  2. содержимое копии сценария на Услугу

Возможное расширение:

  1. использовать grails rest plugin или grails rest-client-builder plugin вместо HTTP-строитель
+0

Спасибо за ответ! Очень признателен. Я добавил зависимости и скопировал сценарий в ** Контроллер **. Когда я обращаюсь к контроллеру из веб-браузера, он дает мне исключение NullPointerException. "Сообщение: Невозможно вызвать метод post() для нулевого объекта" То же самое произошло в службе. Какие-либо предложения? –

+0

Похоже, что 'jiraClient' равно null. Стоит проверить, правильно ли вы его инициализировали. – Armand

+0

Спасибо за подсказку! Возникла проблема с инициализацией. Но теперь получить новое исключение NullPointerException. Вздох! В той же строке 'def Issues = jiraClient.post (requestContentType: JSON, путь: uriPath, body: param)'. «Сообщение: null». –

0

Ввод логики в объект службы даст вам возможность делать инъекции зависимостей, которые являются родными для сервисов grails.

Кроме того, вы должны рассмотреть возможность использования AsyncHTTPBuilder, если в вашем приложении есть много пользователей, пытающихся сделать запросы.

0

Я твердо убежден, что ответ услуга будет оказана непосредственно JSON

//your controller 
    class AbcController{ 

    //your action 
    def save() { 
    render(abcService.save(params) as JSON)//your service response now been rendered to JSON 
     } 

    } 

//your service class class AbcService { 
    def save(params){ 
    .... 
    return something 
    } 
} 
Смежные вопросы