2014-01-06 73 views
2

嗨,謝謝你的閱讀。使用Play framework 2.2(java)迭代JSON數組

我必須通過Play框架調用restful服務並將json結果解析爲對象列表。我的問題是,有成千上萬的資源用於創建一個安靜的服務,但對另一個方向沒有多大影響。

我的下一個問題是我只能找到控制器中的服務調用示例。從模型調用服務是一個壞主意嗎?我怎樣稱呼這項服務(不需要結果)?這是我迄今發現的。

return async(
    WS.url("http://localhost:3021/Dashboard.svc/Conversation").get().map(
     new Function<WS.Response, Result>() { 
      public Result apply(WS.Response response) { 
       return ok(response.asJson()); 
      } 
     } 
    ) 
); 

我是新來玩的,所以請原諒我,如果我問愚蠢的問題。我現在對c#感覺更好。

在此先感謝! Ben

回答

1

找到它。或者 - 發現如何去做。不,如果做我的做法是個好主意。

import play.libs.WS; 
import play.*; 
import play.mvc.*; 
import play.mvc.Result.*; 
import play.libs.F.Promise; 
import play.libs.F.Function; 

import java.util.*; 

import com.fasterxml.jackson.databind.JsonNode; 
import com.fasterxml.jackson.databind.node.ArrayNode; 

public class Order { 

... 

    public static List<Order> getOrders() { 
     String hostUri = Helper.getWsHostUri(); 

     Promise<WS.Response> promise = WS.url(hostUri + "Orders").get(); 
     Promise<List<Order>> promisedResult = promise.map(
      new Function<WS.Response, List<Order>>() { 
       public List<Order> apply(WS.Response response) { 
        JsonNode json = response.asJson(); 
        ArrayNode results = (ArrayNode)json; 

        List<Order> orders = new ArrayList<Order>(); 
        Iterator<JsonNode> it = results.iterator(); 

        while (it.hasNext()) { 
         JsonNode node = it.next(); 
         Order order = new Order(); 

         order.from = node.get("From").asText(); 
         order.contact = node.get("Contact").asText(); 
         order.amount = node.get("Amount").asDouble(); 
         order.status = node.get("Status").asInt(); 

         orders.add(order); 
        } 

        return orders; 
       } 
      } 
     ); 

     return promisedResult.get(); 
    } 
} 

我仍然會很高興看到怎麼辦呢,如果你不喜歡猜測自己...

感謝,並有一個愉快的一天!