使用Play framework 2.2(java)迭代JSON数组

时间:2014-01-06 20:29:50

标签: java web-services playframework-2.2

嗨,谢谢你的阅读。

我必须通过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());
            }
        }
    )
);

我是Play的新手,如果我提出愚蠢的问题,请原谅我。目前我对c#感觉更好。

提前致谢! 本

1 个答案:

答案 0 :(得分: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();
    }
}

如果你不像我自己那样猜测,我仍然会很高兴看到如何做到这一点......

谢谢,祝你有愉快的一天!