2016-03-29 21 views
5

我有一個GRAILS 3控制器,它從webservice(Chargify)接收這個格式的HTTP POST(有效負載部分有大約100個子字段) :使用GRAILS解析FORM-ENCODED參數(chargify 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

爲了確保我正確地理解你..在結束部分您以ID開頭的示例是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