当前位置: 首页 > 知识库问答 >
问题:

在Play 2.3.7上从Promise检索HTTP状态

夏侯楷
2023-03-14

在我们的项目中,我们使用JSON在前端和后端之间进行数据传输。基本上,我们通过准备WSRequestHolder来创建请求,就像play doc告诉我们的那样(https://www.playframework.com/documentation/2.3.7/JavaWS)然后发布一个json字符串。然后将WSResponse映射为“asJson”,并作为promise返回。

但与WSResponse不同,JsonNode不包含从后端返回的http状态,Promise也不包含。

我们以后需要在代码中区分不同的状态代码,以便进行正确的响应处理。

到目前为止,我们得到了一个工厂类,它提供了准备好的对象,其中WSRequestHolder包含url、头和内容类型集,用于发布json数据。此外,我们在工厂实施了如下“post”:

/**
 * Posts the given json body to the specified url
 *
 * @param body Body of JSON node to post
 * @return Promised response from post call
 */
@Override
public F.Promise<JsonNode> post(JsonNode body) {
    try {
        return wsRequestHolder.post(body).map(WSResponse::asJson).recover(new F.Function<Throwable, JsonNode>() {
            // if null response is returned, recover it and return 'java' null properly
            @Override
            public JsonNode apply(Throwable throwable) throws Throwable {
                return null;
            }
        });
    } catch (RuntimeException e) {
        return null;
    }
}

在控制器中,返回的promise可以被解包,以JsonNode的形式检索实际的json响应。

F.Promise<JsonNode> jsonPromise = Factory.preparedJson(url).post(someJsonNode);

JsonNode jsonResponse = jsonPromise.get(responseTimeoutInMs);

但是是的——在控制器级别之间的某个地方,我需要检查状态代码。

非常感谢!

你好,蒂姆

共有1个答案

景胜涝
2023-03-14

您可以检查来自WS响应对象的状态响应,并在promise中与JsonNode一起返回它。这是一个简单的例子:

Promise<Pair<JsonNode,Integer>> jsonPromise = WS.url(url).get().map(
        new Function<WSResponse, Pair<JsonNode,Integer>>() {
            public Pair<JsonNode,Integer> apply(WSResponse response) {
                Integer status=response.getStatus();
                JsonNode json = response.asJson();
                return new Pair(json,status);
            }
        }
);
 类似资料:
  • 问题内容: 我的手机APP以文本模式完美下载内容。下面是执行此操作的代码。我将其称为Communicator类和exectueHttpGet: 我要讲的是(URL的源代码): 该响应是一个字符串。在服务器上,它作为JSON对象输出(与PHP一起),现在在我的Android PHP中,我想将此字符串转换为JSON。这可能吗? 问题答案: 您收到的是从附加到a 并最终转换为的一系列字符-因此,结果是可

  • 我试图使用庞大的Node.js包将文件从Docx转换为HTML。庞大的自述文件建议使用以下格式转换文件: 在函数中的任何位置放置语句将不允许我使用存储的html,但是我可以将正确的html内容输出到控制台。我需要关于如何返回/使用promise之外的html变量的建议,谢谢。

  • 我正在制作一个函数来返回布尔值,以了解元素是否存在,但我得到 我怎么才能得到唯一的真实或虚假响应,请帮助,我使用了if条件,但它显示了该响应…… 这是我调用的函数

  • 在我看来,有一个与控制器的一个功能链接的输入文件 此函数调用服务中的一个函数,该函数假定将我的xml文件转换为json 在服务函数中,XML文件在文件读取器中读取,然后在文件读取器的onloadend部分转换为XML 如何在onloadend中检索转换后的json结果,以便在Angular控制器中使用它,特别是在promise的情况下?或者我应该使用setTimeout吗?

  • 问题内容: 我创建了一个类,以从PHP文件的JSON编码中检索注释。此类从AsyncTask扩展: 如您所见,我正在尝试在“ doInBackground”过程运行时显示一个ProgressDialog。但是progressDialog构造函数要求一个Context,但我不知道如何提供它。 我从Fragment调用此类,所以无法访问这样的上下文: “主要”活动称为:AndroidViewPager

  • 我试图访问的结果(这里是'机构')的抓取,但继续得到这个: promise{ 它说已解决,但不只是给我我想要的数组。 这是我的密码 以上结果来自console.log(Categories)