§处理和服务 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>'
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>
下一步:处理文件上传
在本文档中发现错误?此页面的源代码可以在 此处 找到。阅读完 文档指南 后,请随时贡献拉取请求。有任何问题或建议要分享?请访问 我们的社区论坛,与社区开始对话。