Play framework 2.0 -XML

 

#XML請求的處理和服務

 

1.處理XML請求

 

xml請求是以有效的xml內容作爲請求體的Http請求。它需要指定'text/xm"MIME類型的Content-Type頭。

默認情況下,一個Action使用any content的BodyParser進行解析。你能把內容體轉爲XML。

 

public static index sayHello() {
	  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(Xml.class)
	public static index sayHello() {
	  String name = XPath.selectText("//name", dom);
	  if(name == null) {
	    return badRequest("Missing parameter [name]");
	  } else {
	    return ok("Hello " + name);
	  }
	}
 

住:這種方式下,非XML的請求會返回HTTP400狀態。

 

在命令行下用cURL命令測試一下:

curl 
	  --header "Content-type: text/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
 

 

2.提供XML響應

 

之前的例子,我們處理了Xml請求,但是返回的趨勢"text/plain"的響應。我們把它變爲返回有效的xml響應:


@BodyParser.Of(Xml.class)
	public static index sayHello() {
	  String name = XPath.selectText("//name", dom);
	  if(name == null) {
	    return badRequest("<message \"status\"=\"KO\">Missing parameter [name]</message>");
	  } else {
	    return ok("<message \"status\"=\"OK\">Hello " + name + "</message>");
	  }
	}

 

現在的返回是:

HTTP/1.1 200 OK
	Content-Type: text/xml; charset=utf-8
	Content-Length: 46

	<message status="OK">Hello Guillaume</message>
 

 

發佈了15 篇原創文章 · 獲贊 0 · 訪問量 2696
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章