2014-05-13 17 views
5

Tôi bắt đầu một ứng dụng nhỏ trong trình điều khiển Groovy nhưng tôi không thể làm việc từ tài liệu hướng dẫn cách giữ dữ liệu json đã được gửi trong yêu cầu.Parse json trong Ratpack Groovy

@Grab("io.ratpack:ratpack-groovy:0.9.4") 
import static ratpack.groovy.Groovy.* 
import groovy.json.JsonSlurper 

ratpack { 
    handlers { 
    get { 
     def slurper = new JsonSlurper() 
     def result = slurper.parseText('{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}') 
     render "Hello world! ${result.person}" 
    } 
    post("foo") { 
     def slurper = new JsonSlurper() 
     def result = slurper.parseText("WHAT DO i PUT HERE?") 
     render "Hello world! ${result.person}" 
    } 
    } 
} 

Và một yêu cầu ví dụ:

curl -XPOST -H "Content-Type: application/json" -d '{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}' localhost:5050/foo 

Trả lời

9

Ratpack cung cấp một khái niệm gọi là Parser cho phép bạn phân tích incoming yêu cầu nội dung cho một loại nhất định.

Trong trường hợp của bạn, bạn có thể phân tích cú pháp nội dung yêu cầu gửi đến JsonNode hoặc loại của riêng bạn bằng mô-đun ratpack-jackson. Bạn có thể tìm thêm thông tin here.

Dưới đây là ví dụ của bạn bằng cách sử dụng phân tích cú pháp được cung cấp bởi các module ratpack-jackson:

@Grab("io.ratpack:ratpack-groovy:0.9.12")  
@Grab("io.ratpack:ratpack-jackson:0.9.12")  

import static ratpack.groovy.Groovy.*   
import ratpack.jackson.JacksonModule   
import static ratpack.jackson.Jackson.jsonNode 

ratpack {          
    bindings {         
    add new JacksonModule()     
    }           
    handlers {         
    post("foo") {        
     def postBody = parse jsonNode() 
     render "Hello world! ${postBody.person}" 
    }           
    }           
}     

curl của bạn

curl -XPOST -H "Content-Type: application/json" -d '{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}' localhost:5050/foo 

phản ứng như

Hello world! {"name":"Guillaume","age":33,"pets":["dog","cat"]} 

Tôi hy vọng điều này sẽ giúp!

2

request.body.text sẽ cung cấp cho các định dạng chuỗi của cơ thể JSON

post("foo") { 
    def slurper = new JsonSlurper() 
    def result = slurper.parseText(request.body.text) 
    render "Hello world! ${result.person}" 
} 
+0

Tôi đã xem xét gói chuột vì có vẻ như đây có thể là một nền tảng dịch vụ nghỉ ngơi tuyệt vời. Với điều này, điều gì sẽ là cách thành ngữ để đối phó với dữ liệu json được đăng trong groovy? Làm những gì tôi đã làm? – shmish111

+0

phụ thuộc vào việc triển khai. Ở đây bạn đã sử dụng JsonSlurper để phân tích cú pháp tải trọng JSON, cũng có thể được thực hiện bằng cách sử dụng Gson hoặc bất kỳ thư viện JSON nào khác. Trong trường hợp này, điều này là hoàn toàn tốt đẹp để làm việc với cách bạn kết thúc với một đại diện bản đồ của tải trọng. Xem qua [Ratpack API] (http://www.ratpack.io/manual/current/api/) chủ yếu là gói 'ratpack.jackson' nếu nó hữu ích. @ shmish111 – dmahapatro

3

Câu trả lời trước đó không còn áp dụng được nữa.
Kể từ phiên bản 0.9.19, Ratpack trả về Lời hứa. Ngoài ra, nó bao gồm hỗ trợ phân tích cú pháp Jackson. Vì vậy, ví dụ bạn sẽ trông như thế này tính đến thời điểm viết bài này:

context.parse(Jackson.fromJson(Map)).then { data -> 
    println data.person 
    // do something with person 
    context.response.status(201).send() 
} 

Full tài liệu có sẵn ở đây: https://ratpack.io/manual/current/api/ratpack/jackson/Jackson.html#parsing

tái bút: Một thay đổi ngữ nghĩa mà tôi đã thực hiện cho ví dụ này là trả về một 201 (được tạo), vì nó là một POST.