2016-03-29 4 views
5

У меня есть контроллер GRAILS 3, который получает сообщение HTTP из webservice (Chargify) с этим форматом (раздел полезной нагрузки содержит около 100 записей с большим количеством подполей) :Анализ параметров FORM-ENCODED с помощью GRAILS (зарядные webhooks)

POST/HTTP/1.1 
Accept: */*; q=0.5, application/xml 
Accept-Encoding: gzip, deflate 
Content-Type: application/x-www-form-urlencoded 
X-Chargify-Webhook-Id: 81309408 
X-Chargify-Webhook-Signature: xxxxxxxxxxxxx 
X-Chargify-Webhook-Signature-Hmac-Sha-256: yyyyyyyyyyyyyy 
Content-Length: 48 
User-Agent: Ruby 
X-Newrelic-Id: xxxxxx 
X-Newrelic-Transaction: aaaaaaaaaaaaaa= 
Host: myhost.test.it 

id=81197881&event=statement_settled&payload[site][id]=12345&payload[site][subdomain]=test-sandbox 

есть ли способ, с Grails для разбора «полезной нагрузки» часть и преобразовать его динамически в POJO (или же простой HashMap)?. Chargify использовать этот странный формат, не распознанный GRAILS framework, и я не могу его разобрать автоматически.

Есть ли кто-нибудь, кто мог бы помочь мне разобрать? Благодарим за помощь.

+0

Чтобы убедиться, что я правильно понимаю .. часть в конце ваш пример, начинающийся с идентификатора, является телом запроса Post или является частью URL-адреса? – pczeus

+0

Является ли тело запроса – Sarbyn

+0

Я не вижу встроенного способа автоматического анализа тела запроса в pogo. Вы открыты для других альтернатив? – pczeus

ответ

0

Вы можете попробовать это?

def readChargify() { 
    String requestData = request.reader.text 
    def reqMap = org.grails.web.util.WebUtils.fromQueryString(requestData) 
} 
+0

Это не работает, например, из тела запроса 'id = 81197881 & event = statement_settled & payload [site] [id] = 12345 & payload [site] [subdomain] = test-sandbox' он создаст карту запроса, например: ' [ id: 81197881, event: statement_settled, payload [site] [id]: 12345, payload [site] [subdomain]: test-sandbox] ' и не вложенная карта, например ' {id = '81197881', event = 'statement_settled', site = Site {subdomain = 'test-sandbox', id = '12345'}} ' – Sarbyn