§XMLリクエストの処理と提供
§XMLリクエストの処理
XMLリクエストは、有効なXMLペイロードをリクエストボディとして使用するHTTPリクエストです。リクエストの`Content-Type`ヘッダーには`application/xml`または`text/xml` MIMEタイプを指定する必要があります。
デフォルトでは、`Action`は**任意のコンテンツ**ボディパーサーを使用します。これにより、ボディをXML(実際には`NodeSeq`)として取得できます。
def sayHello = Action { request =>
request.body.asXml
.map { xml =>
(xml \\ "name" headOption)
.map(_.text)
.map { name => Ok("Hello " + name) }
.getOrElse {
BadRequest("Missing parameter [name]")
}
}
.getOrElse {
BadRequest("Expecting Xml data")
}
}
Playにコンテンツボディを直接XMLとして解析するように指示するために、独自の`BodyParser`を指定する方がはるかに優れており(そして簡単です)。
def sayHello = Action(parse.xml) { request =>
(request.body \\ "name" headOption)
.map(_.text)
.map { name => Ok("Hello " + name) }
.getOrElse {
BadRequest("Missing parameter [name]")
}
}
**注:** XMLボディパーサーを使用する場合、`request.body`の値は直接有効な`NodeSeq`になります。
コマンドラインからcURLでテストできます。
curl
--header "Content-type: application/xml"
--request POST
--data '<name>Guillaume</name>'
http://localhost:9000/sayHello
応答は次のようになります。
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 15
Hello Guillaume
§XMLレスポンスの提供
前の例ではXMLリクエストを処理しましたが、`text/plain`レスポンスで応答しました。有効なXML HTTPレスポンスを送信するように変更しましょう。
def sayHello = Action(parse.xml) { request =>
(request.body \\ "name" headOption)
.map(_.text)
.map { name =>
Ok(<message status="OK">Hello
{name}
</message>)
}
.getOrElse {
BadRequest(<message status="KO">Missing parameter [name]</message>)
}
}
応答は次のようになります。
HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
Content-Length: 46
<message status="OK">Hello Guillaume</message>
次へ: ファイルアップロードの処理
このドキュメントにエラーを見つけた場合、このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを送信して自由に貢献してください。質問やアドバイスを共有したいですか?コミュニティフォーラムにアクセスして、コミュニティとの会話を始めましょう。