2016-03-29 11 views
5

Tôi có một bộ điều khiển GRAILS 3 nhận được một bài đăng HTTP từ một dịch vụ web (Chargify) với định dạng này (phần tải trọng có khoảng 100 mục nhập với nhiều trường con) :Phân tích cú pháp các tham số FORM-ENCODED với GRAILS (tính phí các webhook)

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 

có cách nào với GRAILS để phân tích "tải trọng" phần và chuyển đổi nó tự động đến một POJO (hay còn một hashmap đơn giản)?. Chargify sử dụng định dạng lạ này không được nhận dạng bởi GRAILS framework và tôi không thể phân tích cú pháp tự động.

Có ai giúp tôi phân tích cú pháp không? Cảm ơn bạn đã giúp đỡ.

+0

Để chắc chắn rằng tôi hiểu bạn một cách chính xác .. phần vào cuối năm ví dụ của bạn bắt đầu bằng ID là phần nội dung của yêu cầu Đăng hoặc là một phần của URL? – pczeus

+0

Cơ thể của yêu cầu – Sarbyn

+0

Tôi không thấy bất kỳ cách nào được tích hợp sẵn để tự động phân tích cú pháp nội dung yêu cầu thành một pogo. Bạn có mở các lựa chọn thay thế khác không? – pczeus

Trả lời

0

Bạn có thể thử điều này không?

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

Nó không hoạt động, ví dụ từ phần yêu cầu 'id = 81197881 & event = statement_settled & payload [site] [id] = 12345 & payload [site] [subdomain] = test-sandbox' nó sẽ tạo một bản đồ yêu cầu như: ' [ id: 81197881, sự kiện: statement_settled, payload [site] [id]: 12345, tải trọng [site] [tên miền phụ]: test-sandbox] ' và không phải bản đồ lồng nhau như ' {id = '81197881', event = 'statement_settled', site = Trang web {subdomain = 'test-sandbox', id = '12345'}} ' – Sarbyn

Các vấn đề liên quan