2014-05-13 2 views
5

Groovy 콘솔에서 작은 ratpack 앱을 시작했지만 요청에서 전송 된 json 데이터를 얻는 방법을 설명서에서 해결할 수 없습니다. Ratpack Groovy의 Parse json

@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}" 
    } 
    } 
} 

그리고 예 요청 :

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

답변

9

Ratpack의 문자열 형식을 줄 것이다 당신이 들어오는 구문 분석 할 수있는 Parser로 알려진 개념을 제공 지정된 유형으로 본문을 요청하십시오.

경우에 따라 들어오는 요청 본문을 ratpack-jackson 모듈을 사용하여 JsonNode 또는 자신의 유형으로 구문 분석 할 수 있습니다. here에 대한 자세한 정보를 찾을 수 있습니다.

@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 -XPOST -H "Content-Type: application/json" -d '{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}' localhost:5050/foo 

응답합니다이

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

난이 도움이되기를 바랍니다 :

다음은 ratpack-jackson 모듈이 제공하는 파서를 사용하여 예입니다!

2

request.body.text는 JSON 본체

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

멋진 휴식 서비스 플랫폼이 될 것 같아서 쥐 팩을 보았습니다. 그렇다면 그루비에서 json 데이터를 다루는 관용적 인 방법은 무엇일까요? 내가 한 짓을하는거야? – shmish111

+0

은 구현에 따라 다릅니다. 여기에서는 JsonSlurper를 사용하여 JSON 페이로드를 구문 분석했으며 Gson 또는 기타 JSON 라이브러리를 사용하여 수행 할 수도 있습니다. 이 경우 페이로드의 맵 표현으로 끝나는 방식으로 작업하는 것이 완벽합니다. 유용 할 경우 [Ratpack API] (http://www.ratpack.io/manual/current/api/)에서 주로'ratpack.jackson' 패키지를 한눈에 볼 수 있습니다. @ shmish111 – dmahapatro

3

이전 답변은 더 이상 적용되지 않습니다.
버전 0.9.19부터 Ratpack은 Promise를 반환합니다. 또한 Jackson 구문 분석 지원도 포함됩니다. 가능 여기

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

전체 문서 : https://ratpack.io/manual/current/api/ratpack/jackson/Jackson.html#parsing

추신 그래서 예는이 글을 쓰는 시점 기준으로 같을 것이다 이 예제에서 한 가지 의미있는 변화는 POST이기 때문에 201 (생성됨)을 반환하는 것입니다.