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>
 

猜你喜欢

转载自shenbai.iteye.com/blog/1496745