java调用framework_java – Play Framework 2 – 调用Web服务并返回一个对象

我有一个模型,我想填充Web服务的详细信息.我想异步这样做,以免阻塞服务器线程.我们假装它是一个登录服务.

现在我想要做的是向远程服务器发出请求并最终返回User模型对象.所以方法签名看起来像这样:

public static User loginUser(String username,String password) {

我理解为了对Web服务进行异步调用,我应该使用Promise:

Promise wsPromise = WS.url("http://myserver.com/login")

.setContentType("application/json; charset=utf-8")

.post("... the username and password ...");

哪个还没有启动请求.我可以在这个对象上调用get()来对服务进行阻塞调用.这有效.

为了异步执行此操作,我认为我需要映射它并以某种方式执行它.

Promise resultPromise = wsPromise.map(new F.Function() {

@Override

public User apply(WS.Response response) throws Throwable {

System.out.println(response.getBody());

return new User(... based on something extracted from the returned JSON ...);

}

});

现在我该如何触发此操作?如果我在resultPromise上调用get(),它会调用但最终会触发Timeout Exception.我不能使用async(…)方法,因为它只返回一个Result.

实际上,这些示例似乎调用Web服务,将JSON结果映射到对象,然后立即将它们映射回相同的JSON.当我想将User(在我的情况下)传递回调用函数时,没什么用处.

说实话,我对这种异步性质有点困惑(你可能已经猜到了).特别是,这实际上是一个阻止操作,因为我们必须等待Web服务返回响应.文档似乎表明使用Promise / Future模式将避免这种阻塞.

底线是:如何在不阻止Play Framework服务器中的线程的情况下将Web服务调用的结果映射回模型对象?

随意滥用我对Play Framework缺乏经验…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值