嗨,谢谢你的阅读。
我必须通过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#感觉更好。
提前致谢! 本
答案 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();
}
}
如果你不像我自己那样猜测,我仍然会很高兴看到如何做到这一点......
谢谢,祝你有愉快的一天!
本