2017-04-09 130 views
0

我通过网页发送数据到服务器发送数据。Ratpack无法从主体检索价值

$("#1, #2, #3, #4").on("click", function(){ 
      console.log($(this).attr("id")); 
       var xhr = new XMLHttpRequest(); 
       xhr.open("POST", "SimpleServlet.html", true); 
       xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 
       xhr.send(JSON.stringify({"product_id": $(this).attr("id"), "quantity" : 1 })); 
      }); 

在这个javascript的帮助下。我确信它会被发送到服务器,并且会到达那里。

在服务器上,我尝试检索我写入数据的值。

.post("SimpleServlet.html", ctx -> 
        { 
         final Response response = ctx.getResponse(); 

         System.out.println("Getting result"); 

         final ExecResult<String> result = ExecHarness.yieldSingle(c -> 
           ctx.parse(String.class)); 


         System.out.println("Getting value"); 
         response.send("webshop.html"); 
        }) 

我很遗憾,没有找到任何指导如何检索相应的字符串值。

我尝试了上面的内容,但是这确实会卡住ExecHarness永久。

我想获得价值。带他们去创建一个新的java对象,然后用另一个java对象的json回应。 (二对象依赖于一个对象的数据)

回答

1

Ratpack's API reference 相反ExecHarness的尝试是这样的:

ctx.getRequest().getBody().then({ data -> 
    String text = data.getText(); 
    // parse text with whatever you use, e.g. Jackson 

    System.out.println("Getting value"); 
    response.send("webshop.html"); 
}) 

你可以连太,例如

context.getRequest().getBody().flatMap({ data -> 
    //parse data and get id 
    //call to async service who returns Promise 
    return service.getReport(id).map((String report) -> { 
     // do some staff 
    }) 
}).then({ 
    //final staff before send response 
    //import static ratpack.jackson.Jackson.json; 
    context.getResponse().send(json(result).toString()); 
})