Skip to content
Server Plugin

DoubleReceive

必要な依存関係: io.ktor:ktor-server-double-receive

コード例: double-receive

Native サーバー
KtorはKotlin/Nativeをサポートしており、追加のランタイムや仮想マシンなしでサーバーを実行できます。
のサポート: ✅

DoubleReceive プラグインは、RequestAlreadyConsumedException 例外を発生させずにリクエストボディを複数回受信する機能を提供します。 これは、プラグインがすでにリクエストボディを消費しているために、ルートハンドラー内でそれを受信できない場合に役立ちます。 例えば、DoubleReceive を使用して CallLogging プラグインでリクエストボディをログに記録し、その後 post ルートハンドラー内でもう一度ボディを受信することができます。

DoubleReceive プラグインは、今後のアップデートで破壊的変更が加えられる可能性がある、進化中の実験的な API を使用しています。

依存関係の追加

DoubleReceive を使用するには、ビルドスクリプトに ktor-server-double-receive アーティファクトを含める必要があります。

Kotlin
Groovy
XML

DoubleReceive のインストール

DoubleReceive プラグインをアプリケーションにインストールするには、指定された

モジュール
モジュールを使用すると、ルートをグループ化してアプリケーションを構造化できます。
内の install 関数に渡します。 以下のコードスニペットは、DoubleReceive のインストール方法を示しています...

  • ... embeddedServer 関数の呼び出し内。
  • ... Application クラスの拡張関数である、明示的に定義された module 内。
kotlin
kotlin

DoubleReceive プラグインは、特定のルートにインストールすることもできます。 これは、アプリケーションのリソースごとに異なる DoubleReceive 設定が必要な場合に便利です。

DoubleReceive をインストールすると、リクエストボディを複数回受信できるようになり、呼び出すたびに同じインスタンスが返されます。 例えば、CallLogging プラグインを使用してリクエストボディのログ出力を有効にし...

kotlin
install(CallLogging) {
    level = Level.TRACE
    format { call ->
        runBlocking {
            "Body: ${call.receiveText()}"
        }
    }
}

... その後、ルートハンドラー内でもう一度リクエストボディを取得できます。

kotlin
post("/") {
    val receivedText = call.receiveText()
    call.respondText("Text '$receivedText' is received")
}

完全な例はこちらにあります: double-receive

DoubleReceive の設定

デフォルトの設定では、DoubleReceive はリクエストボディを以下の型として受信する機能を提供します:

  • ByteArray
  • String
  • Parameters
  • ContentNegotiation プラグインで使用される データクラス

デフォルトでは、DoubleReceive は以下をサポートしていません:

同じリクエストから異なる型を受信したり、ストリームやチャネルを受信したりする必要がない場合は、cacheRawRequest プロパティを false に設定してください:

kotlin
install(DoubleReceive) {
    cacheRawRequest = false
}