§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);
}
}
}
もちろん、コンテンツボディを直接XMLとして解析するようにPlayに要求する独自の`BodyParser`を指定する方がはるかに優れており(そして簡単です)。
@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>
次へ: ファイルアップロードの処理
このドキュメントにエラーを見つけた場合、このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを自由に送ってください。質問やアドバイスを共有したい場合は、コミュニティフォーラムにアクセスして、コミュニティとの会話を開始してください。