§處理和提供 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")
}
}
指定我們自己的 BodyParser
以要求 Play 直接將內容主體剖析為 XML 會更好(也更簡單)
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>'
https://127.0.0.1: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>
接下來:處理檔案上傳
在這個文件中發現錯誤了嗎?此頁面的原始碼可以在 這裡 找到。在閱讀 文件指南 後,請隨時提出拉取請求。有問題或建議要分享嗎?前往 我們的社群論壇 與社群展開對話。