快速业务通道

精通Grails: RESTful Grails - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
t;   <official-name>Eppley Airfield</official-name>   <city>Omaha</city>   <state>NE</state>   <country>US</country>   <location latitude="41.3019419" longitude="-95.8939015"/> </airport> 

现在,在 index 操作中,用清单 20 中的代码替代 def airport = new Airport(params.airport) 行:

清单 20. 解析复杂的 XML

def airport = new Airport() airport.iata = request.XML.@iata airport.name = request.XML."official-name" airport.city = request.XML.city  airport.state = request.XML.state airport.country = request.XML.country  airport.lat = request.XML.location.@latitude airport.lng = request.XML.location.@longitude

request.XML 对象是一个持有原始 XML 的 groovy.util.XmlSlurper。它是根元素,因此您可以通过 名称(request.XML.city)来寻找子元素。如果名称是用连字符连接的,或者使用了名称空间,就加上引 号(request.XML."official-name")。元素的属性要使用 @ 符号(request.XML.location.@latitude) 来访问。

最后,使用 cURL 来测试它:curl --request POST --header "Content-Type: text/xml" --data @newAirport.xml http://localhost:9090/trip/rest/airport。

精通Grails: RESTful Grails(11)

时间:2011-07-29 IBM Scott Davis

实现 PUT

您需要支持的最后一个 HTTP 方法就是 PUT。了解了 POST 之后,会知道代码基本是一样的。惟一不 同的就是它无法直接从 XML 构造类,您需要向 GORM 寻求现有的类。然后,airport.properties = params.airport 行会用新的 XML 数据来替代现有的字段数据,如清单 21 所示:

清单 21. 响应 HTTP PUT

def index = {   switch(request.method){    case "POST": //...    case "GET":  //...    case "PUT":     def airport = Airport.findByIata(params.airport.iata)     airport.properties = params.airport     if(airport.save()){      response.status = 200 // OK      render airport as XML     }     else{      response.status = 500 //Internal Server Error      render "Could not create new Airport due to errors:\n  ${airport.errors}"     }     break    case "DELETE": //...   } }

创建一个名为 editAirport.xml 的文件,如清单 22 所示:

清单 22. editAirport.xml

<airport>   <iata>oma</iata>   <name>xxxEppley Airfield</name>   <city>Omaha</city>   <state>NE</state>   <country>US</country>   <lat>41.3019419</lat>   <lng>-95.8939015</lng> </airport>

最后,使用 cURL: curl --verbose --request PUT --header "Content-Type: text/xml" --data @editAirport.xml http://localhost:9090/trip/rest/airport 来测试它。

结束语

我在很短的时间内讲解了很多相关知识。现在,您应该了解到 SOA 和 ROA 之间的不同之处了。您同 样也应该意识到,并不是所有的 RESTful Web 服务都如出一辙。有些 Web 服务是 GETful 的 — 使用 HTTP GET 请求来调用类 RPC 方法。而其他的则是纯粹面向资源的,其中 URI 是访问资源的关键,而标 准 HTTP GET、POST、PUT 和 DELETE 方法构

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号