快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
L 输出支持。图 1 展示了调用 xmlList 操作的结果:

图 1. 来自于 Grails 的默认 XML 输出

精通Grails: RESTful Grails(4)

时间:2011-07-29 IBM Scott Davis

虽然默认的 XML 输出很好调试,但您还是想稍微自定义一下格式。还好,render() 方法给您提供了 一个 Groovy MarkupBuilder,它允许您动态定义自定义 XML。清单 2 创建了一些自定义 XML 输出:

清单 2. 自定义 XML 输出

def customXmlList = {   def list = Airport.list()   render(contentType:"text/xml"){    airports{     for(a in list){      airport(id:a.id, iata:a.iata){       "official-name"(a.name)       city(a.city)       state(a.state)       country(a.country)       location(latitude:a.lat, longitude:a.lng)      }     }    }   } }

图 2 展示了输出结果:

图 2. 使用 Groovy MarkupBuilder 的自定义 XML 输出

注意源代码和 XML 输出之间的对应的紧密程度。您可以随意定义元素名称(airports、airport、 city),无需顾及它们是否与类的真实字段名称对应。如果您想提供一个以连字符链接的元素名称的话( 诸如 official-name),又或者想要添加名称空间支持的话,只要给元素名称加上引号就可以了。而属性 (诸如 id 和 iata)是用 Groovy 散列映射键:值 语法定义的。要填充元素的正文,需要提供一个不带 键:的值。

精通Grails: RESTful Grails(5)

时间:2011-07-29 IBM Scott Davis

内容协商与 Accept 报头

创建一个返回数据的 HTML 和 XML 表示的单独闭包是很简单的,但如果想创建一个既可以返回 HTML 又可以返回 XML 表示的闭包的话,该怎么办呢。这也是可以实现的,这要多亏在 HTTP 请求中包含有 Accept 报头。这个简单的元数据告诉服务器:“嗨,您对这个 URI 中的资源可能有不只一个资源表示 — 我更喜欢这个。”

cURL 是一个方便的开源命令行 HTTP 工具。在命令行输入 curl http://localhost:9090/trip/airport/list ,以此来模拟请求机场列表的浏览器请求。您应该会看到 HTML 响应展现在您的荧屏上。

现在,对请求做两处小小的变动。这回,代替 GET 发出一个 HEAD 请求。HEAD 是一个标准 HTTP 方 法,它仅仅返回响应的元数据,而不返回正文(您现在正在进行的调试的类型包含在 HTTP 规范中)。另 外,将 cURL 放置于 verbose 模式,这样您就也能够看到请求元数据了,如清单 3 所示:

清单 3. 使用 cURL 来调试 HTTP

$ curl --request HEAD --verbose  http://localhost:9090/trip/airport/list * About to connect() to localhost port 9090 (#0) *  Trying ::1... connected * Connected to localhost (::1) port 9090 (#0) > HEAD /trip/airport/list HTTP/1.1 > User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0)      libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 > Host: localhost:9090 > Accept: */* > < HTTP/1.1 200 OK < Content-Language: en-US < Content-Type: text/html; charset=utf-8 < Content-Length: 0 < Server: Jetty(6.1.4) < * Connection #0 to host localhost left intact * Closing connection #0

注意请求中的 Accept 报头。客户机要是提交 */* 的话,就意味着:“返回什么样的格式都无所谓。 我将接受任何内容。”

cURL 允许您使用这个值来覆盖 --header 参数。输入 curl --request HEAD --verbose --header Accept:text/xml http://localhost:9090/trip/air

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号