簡體   English   中英

播放2.6:在自定義http操作中獲取響應正文

[英]Play 2.6: get response body in custom http action

前一段時間,我問如何從Play 2.5.0 Java的Result中獲取主體。

答案基本上是使用play.core.j.JavaResultExtractor 我現在升級到2.6,並且JavaResultExtractor不再存在(或至少不是公共的)。

如何在Play 2.6中做到這一點?

我確實找到了Result.body().consumeData ,它似乎可以正常工作,但同時也帶來了令人擔憂的警告:

應謹慎使用此方法,因為如果源表示短暫的流,則在調用此方法后該實體可能不可用。

我想,由於我是在一個操作中執行此操作的,因此可以調用consumpData將所有數據放入局部變量中,進行處理,然后使用存儲的數據返回新結果。 這僅在數據太大而無法放入內存的情況下才失敗,這不是我目前所期望的。

在Play 2.6中,仍然可以重新實現2.5功能。 請看一下從Result獲取Json正文的示例:

public static JsonNode resultToJsonNode(final Result result, final long timeout, final Materializer mat)
    throws Exception {
    FiniteDuration finiteDuration = Duration.create(timeout, TimeUnit.MILLISECONDS);
    byte[] body = Await.result(
        FutureConverters.toScala(result.body().consumeData(mat)), finiteDuration).toArray();
    ObjectMapper om = new ObjectMapper();
    final ObjectReader reader = om.reader();

    return reader.readTree(new ByteArrayInputStream(body));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM