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>
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值