【问题标题】:Retrieve HTTP status from Promise<JsonNode> on Play 2.3.7在 Play 2.3.7 上从 Promise<JsonNode> 检索 HTTP 状态
【发布时间】:2015-06-08 08:07:19
【问题描述】:

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

但与 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);

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

提前非常感谢!

你好,蒂姆

【问题讨论】:

    标签: java json playframework promise playframework-2.3


    【解决方案1】:

    您可以检查来自 WSResponse 对象的状态响应,并将其与 JsonNode 一起返回到 Promise 中。这是一个简单的例子:

    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);
                }
            }
    );
    

    【讨论】:

    • 谢谢!我会尽快检查的。
    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2013-07-25
    • 2018-10-12
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多