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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章