§处理和提供 XML 请求
§处理 XML 请求
XML 请求是使用有效 XML 负载作为请求正文的 HTTP 请求。它必须在 Content-Type
标头中指定 application/xml
或 text/xml
MIME 类型。
默认情况下,操作使用 **任何内容** 体解析器,您可以使用它来检索正文作为 XML(实际上是 org.w3c.Document
)
public Result sayHello(Http.Request request) {
Document dom = request.body().asXml();
if (dom == null) {
return badRequest("Expecting Xml data");
} else {
String name = XPath.selectText("//name", dom);
if (name == null) {
return badRequest("Missing parameter [name]");
} else {
return ok("Hello " + name);
}
}
}
当然,指定我们自己的 BodyParser
来让 Play 直接将内容正文解析为 XML 更好(更简单)
@BodyParser.Of(BodyParser.Xml.class)
public Result sayHelloBP(Http.Request request) {
Document dom = request.body().asXml();
if (dom == null) {
return badRequest("Expecting Xml data");
} else {
String name = XPath.selectText("//name", dom);
if (name == null) {
return badRequest("Missing parameter [name]");
} else {
return ok("Hello " + name);
}
}
}
注意:这样,对于非 XML 请求,将自动返回 400 HTTP 响应。
您可以在命令行上使用 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 响应
@BodyParser.Of(BodyParser.Xml.class)
public Result replyHello(Http.Request request) {
Document dom = request.body().asXml();
if (dom == null) {
return badRequest("Expecting Xml data");
} else {
String name = XPath.selectText("//name", dom);
if (name == null) {
return badRequest("<message \"status\"=\"KO\">Missing parameter [name]</message>")
.as("application/xml");
} else {
return ok("<message \"status\"=\"OK\">Hello " + name + "</message>").as("application/xml");
}
}
}
现在它回复
HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
Content-Length: 46
<message status="OK">Hello Guillaume</message>
下一步:处理文件上传
在此文档中发现错误?此页面的源代码可以在 此处 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?转到 我们的社区论坛,与社区开始对话。