- 浏览: 538160 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (174)
- Groovy (28)
- Grails (14)
- DHTML (5)
- JS (4)
- jQuery (16)
- JAVA (16)
- Eclipse (4)
- Hibernate (2)
- Resin (2)
- Oracle (25)
- Maven (4)
- Struts2 (1)
- WebWork2 (3)
- Tomcat (2)
- Windows7 (4)
- Griffon (2)
- PowerDesigner (1)
- Pro*C (2)
- JDK (1)
- 乱码 (2)
- WebService (3)
- .NET (1)
- 性能 (2)
- 安装 (1)
- 命令行 (1)
- function (1)
- type (1)
- Mysql (1)
- 同步 (1)
- Synchronized (1)
- json (3)
- Office (1)
- Visio (1)
- 自定义形状 (1)
- jsong (0)
- gson (1)
- fastjson (1)
- EM (1)
- DB2 (6)
- Sequence (1)
- RHEL5.x (1)
- WAS6.1 ND (1)
- SQL (1)
- -964 (1)
- Linux (4)
- Date (1)
- Format (1)
- Add (1)
- SHELL (1)
- CSS (2)
- Bootstrap (1)
- nginx (1)
- Openresty (2)
- JWPlayer (1)
- showdoc (1)
- 常用网址 (1)
- lua (2)
- SpringBoot (1)
- Office pdf linux (1)
最新评论
-
纵观全局:
Great
阿里巴巴开源JSON解析组件FastJson简单使用笔记 -
guxuede:
...
Groovy编程技巧 -
a1439226817:
groovy用的多吗?我还没发现有哪个java项目在用这个?
Groovy同步 -
晴子9034:
在网上搜到的几乎全是说满了就扩充。但是我有个疑问,满了就扩充, ...
解决DB2 SQLCODE=-964日志文件满的问题 -
在世界的中心呼喚愛:
好东西啊,就用这个包。
阿里巴巴开源JSON解析组件FastJson简单使用笔记
如今的Web,孤立的应用已经不再吃香,随之而来的是与其他应用(如Twitter)或服务(如S3)交互的意愿越来越强烈。对于Groovy而言,HTTPBuilder绝对是应对这一需求的不二之选。
如果熟悉HttpClient,那么你对HTTPBuilder就不会感到陌生,它是对前者的封装,使之更符合Groovy的使用惯例。下面的例子摘自HTTPBuilder的文档,它充分展示了自己的特点:
JSON:借助Json-Lib的JsonGroovyBuilder动态构造。
同样,HTTPBuilder对于POST也提供了便利的post方法,关于它的使用也请参见文档。
REST是如今Web的宠儿,许多Web 2.0 API都宣称自己是RESTful的。且不论其中的真伪,作为给HTTP操作提供DSL的工具,HTTPBuilder自然没有错过这个潮流。RESTClient便是它对于这种趋势的回应,其本身是HTTPBuilder的子类,虽然损失了部分灵活性,但简化了为GET、PUT、POST、DELETE和HEAD操作:
AsyncHTTPBuilder是该工具的另一个类,看名字就知道,它主要用于异步请求。它的使用方式类似HTTPBuilder,只是返回结果是一个java.util.concurrent.Future类型,关于它的使用详情,可参见文档。
想找台免费的机器吗?现在已完全不是天方夜谭,Google GAE就是你要找的目标。虽然说它是免费的并不完全对,它在一定配额内免费,但这个配额对于个人实验或小规模的应用,应该够用了。开发GAE应用对于Grails来讲并非难事,但如果你想在应用里使用HTTPBuilder去发起请求,那么就不会那么顺利。由于GAE的安全限制,你不能直接去打开Socket,这正是HTTPBuilder底层(HttpClient)的机制。这时,就需要使用HTTPURLConnection完成这一任务。以它为基础,HTTPBuilder工具包内提供了另一个兼容GAE的“HTTPBuilder”:HttpURLClient。使用其他并不复杂:
本文最后要介绍的一个组件是URIBuilder,它并不直接面对HTTP请求,而是辅助HTTPBuilder构造复杂的URL,在其内部使用。它的基本使用如下:
同时也提供了对查询字符串的处理:
参考:http://my.oschina.net/groovyland/blog/3035
如果熟悉HttpClient,那么你对HTTPBuilder就不会感到陌生,它是对前者的封装,使之更符合Groovy的使用惯例。下面的例子摘自HTTPBuilder的文档,它充分展示了自己的特点:
import groovyx.net.http.HTTPBuilder import static groovyx.net.http.Method.GET import static groovyx.net.http.ContentType.TEXT def http = new HTTPBuilder( 'http://www.google.com/search' ) http.request(GET,TEXT) { req -> uri.path = '/mail/help/tasks/' headers.'User-Agent' = 'Mozilla/5.0' //请求成功 response.success = { resp, reader -> assert resp.statusLine.statusCode == 200 println "My response handler got response: ${resp.statusLine}" println "Response length: ${resp.headers.'Content-Length'}" System.out << reader // print response stream } //404 response.'404' = { resp -> println 'Not found' } // 401 http.handler.'401' = { resp -> println "Access denied" } //其他错误,不实现则采用缺省的:抛出异常。 http.handler.failure = { resp -> println "Unexpected failure: ${resp.statusLine}" } } 无需过多的讲解,上述的例子已经非常明白地说明了HTTPBuilder的基本使用。尽管如此,对于上例中的内容类型(即request括号中的TEXT),还是有必要啰嗦几句。HTTPBuilder支持对响应内容的自动解析,解析的方式可在请求中指定,缺省除了TEXT之外,还支持XML、HTML和JSON。如果在请求中不指定解析方式,那么它会根据响应的内容类型选择最合适的方式进行解析。对于每一种内容类型: TEXT,纯文本 XML,采用XmlSlurper解析内容 HTML,先采用NekoHTML使HTML规范化,之后采用XmlSlurper解析DOM JSON,采用JSON-lib解析内容 要想按照自己的意愿解析内容,你可以创建自己的内容解析器:import au.com.bytecode.opencsv.CSVReader import groovyx.net.http.ParserRegistry //注册自己的内容类型和解析器 http.parser.'text/csv' = { resp -> return new CSVReader( new InputStreamReader( resp.entity.content , ParserRegistry.getCharset( resp ) ) ) } //验证使用 http.get( uri : 'http://somehost.com/contacts.csv' , contentType : 'text/csv' ) { resp, csv -> assert csv instanceof CSVReader // parse the csv stream here. }
除了展示如何支持新的内容类型,上例还展示另一种GET请求方法:直接使用HTTPBuilder的get方法。该方法简化了GET请求的操作,非常适合简单的场景。提到了GET,就不能不提POST,使用HTTPBuilder完成POST请求的方法如下:import groovyx.net.http.HTTPBuilder def http = new HTTPBuilder('http://twitter.com/statuses/') http.request( POST ) { uri.path = 'update.xml' body = [ status : 'update!' , source : 'httpbuilder' ] requestContentType = ContentType.URLENC response.success = { resp -> println "Tweet response status: ${resp.statusLine}" assert resp.statusLine.statusCode == 200 } }
同样非常简单,不同则在于POST中需要指定body和requestContentType,使用它完全可以模拟窗体的提交。在GET请求中我们谈到了对于响应内容的解析,与之对应的则是如何在POST中提交不同的内容类型:
XML:使用StreamingMarkupBuilder。
http.request( POST, XML ) {
body = {
auth {
user 'Bob'
password 'pass'
}
}
}
JSON:借助Json-Lib的JsonGroovyBuilder动态构造。
http.request( POST, JSON ) { req -> body = [ first : 'Bob', last : 'Builder', address : [ street : '123 Some St', town : 'Boston', state : 'MA', zip : 12345 ] ] response.success = { resp, json ->...} }
同样,HTTPBuilder对于POST也提供了便利的post方法,关于它的使用也请参见文档。
REST是如今Web的宠儿,许多Web 2.0 API都宣称自己是RESTful的。且不论其中的真伪,作为给HTTP操作提供DSL的工具,HTTPBuilder自然没有错过这个潮流。RESTClient便是它对于这种趋势的回应,其本身是HTTPBuilder的子类,虽然损失了部分灵活性,但简化了为GET、PUT、POST、DELETE和HEAD操作:
twitter = new RESTClient( 'https://twitter.com/statuses/' ) //HEAD twitter.head( path : 'public_timeline.json' ).status == 200 //GET def resp = twitter.get( path : 'friends_timeline.json' ) //POST def msg = "I'm using HTTPBuilder's RESTClient on ${new Date()}" resp = twitter.post( path : 'update.xml', body : [ status:msg, source:'httpbuilder' ] , requestContentType : URLENC ) //DELETE resp = twitter.delete( path : "destroy/${postID}.json" )
AsyncHTTPBuilder是该工具的另一个类,看名字就知道,它主要用于异步请求。它的使用方式类似HTTPBuilder,只是返回结果是一个java.util.concurrent.Future类型,关于它的使用详情,可参见文档。
想找台免费的机器吗?现在已完全不是天方夜谭,Google GAE就是你要找的目标。虽然说它是免费的并不完全对,它在一定配额内免费,但这个配额对于个人实验或小规模的应用,应该够用了。开发GAE应用对于Grails来讲并非难事,但如果你想在应用里使用HTTPBuilder去发起请求,那么就不会那么顺利。由于GAE的安全限制,你不能直接去打开Socket,这正是HTTPBuilder底层(HttpClient)的机制。这时,就需要使用HTTPURLConnection完成这一任务。以它为基础,HTTPBuilder工具包内提供了另一个兼容GAE的“HTTPBuilder”:HttpURLClient。使用其他并不复杂:
import groovyx.net.http.* def http = new HttpURLClient( url: 'http://twitter.com/statuses/' ) def resp = http.request( path: 'user_timeline.json' , query: [id:'httpbuilder', count:5] ) println "JSON response: ${resp.status}" resp.data.each { println it.created_at println ' ' + it.text }
本文最后要介绍的一个组件是URIBuilder,它并不直接面对HTTP请求,而是辅助HTTPBuilder构造复杂的URL,在其内部使用。它的基本使用如下:
import groovyx.net.http.URIBuilder def uri = new URIBuilder( 'http://www.google.com/one/two?a=1#frag' ) uri.scheme = 'https' assert uri.toString() == 'https://www.google.com:80/one/two?a=1#frag' uri.host = 'localhost' assert uri.toString() == 'https://localhost:80/one/two?a=1#frag' uri.port = 8080 assert uri.toString() == 'https://localhost:8080/one/two?a=1#frag' uri.fragment = 'asdf2' assert uri.toString() == 'https://localhost:8080/one/two?a=1#asdf2' // relative paths: uri.path = 'three/four.html' assert uri.toString() == 'https://localhost:8080/one/three/four.html?a=1#asdf2' uri.path = '../four/five' assert uri.toString() == 'https://localhost:8080/one/four/five?a=1#asdf2' // control the entire path with leading '/' : uri.path = '/six' assert uri.toString() == 'https://localhost:8080/six?a=1#asdf2'
同时也提供了对查询字符串的处理:
def uri = new groovyx.net.http.URIBuilder( 'http://localhost?a=1&b=2' ) assert uri.query instanceof Map assert uri.query.a == '1' assert uri.query.b == '2' uri.addQueryParam 'd', '4' uri.removeQueryParam 'b' assert uri.toString() == 'http://localhost?d=4&a=1' uri.query = [z:0,y:9,x:8] assert uri.toString() == 'http://localhost?z=0&y=9&x=8' uri.query = null assert uri.toString() == 'http://localhost' // parameters are also properly escaped as well: uri.query = [q:'a:b',z:'war & peace'] assert uri.toString() == 'http://localhost?q=a%3Ab&z=war+%26+peace'
参考:http://my.oschina.net/groovyland/blog/3035
发表评论
-
阿里巴巴开源JSON解析组件FastJson简单使用笔记
2012-07-13 15:02 50858惯例,直接上代码,环境:groovy1.8.6+jdk1.6. ... -
Gson使用笔记
2012-07-13 14:56 1693直接看代码,环境为groovy1.8.6+jdk1.5.31, ... -
Groovy同步
2012-05-30 14:30 1798原贴点击这里 在 groovy 中同步 我的项目与 gro ... -
Grails编写WebService客户端
2012-05-28 13:39 2854环境:jdk1.6.0.31 + Grails2.0.4 1. ... -
groovy编写webservice服务端和客户端(含连接数据并输出JSON数据)
2012-05-25 16:45 3053个人总结,网上几乎没有此方面资料,有一篇帖子,按照其内容无法运 ... -
使用Groovy进行Socket编程之-字节数组版
2011-12-30 14:53 3525服务端代码: import java.net.Server ... -
Groovy连接2个数据库进行数据操作
2011-11-21 11:37 2091import groovy.sql.Sql clas ... -
(转)Groovy 1.8中的超炫JSON支持
2011-07-29 14:51 2303http://www.groovyq.net/content/ ... -
(转)打动你朋友的11条Groovy超炫代码
2011-07-21 16:20 1471http://www.groovyq.net/content/ ... -
Groovy 浅入
2010-08-31 13:53 1992转贴地址:http://nottiansyf.iteye.co ... -
一个Grovvy开发者的总结!
2010-08-09 15:58 2696转自:http://blog.donews.com/WFoxd ... -
实战 Groovy: 构建和解析 XML
2010-08-09 15:39 1461原贴地址:http://www.ibm.com/develop ... -
如何使用groovyc 和 groovy
2010-08-09 15:32 3227开发人员可直接调用Groovy编译器来编译脚本文件,命令 ... -
Groovy脚本文件里边静态main方法
2010-08-09 15:30 1224class Test2 {//含有static void ... -
Groovy中文件追加和日期格式化
2010-08-09 15:28 1969new File("record.txt" ... -
Groovy配置文件的读写
2010-08-09 15:26 5077import org.asdtiang.util.DESC ... -
Groovy DES加解密
2010-08-09 15:25 2350import java.security.* import ... -
使用Groovy进行Socket编程之-普通文本版
2010-08-03 12:27 2649服务端代码: import java.net.Serve ... -
(转)Groovy风格的JDBC编程
2010-06-09 16:08 1687原贴地址:http://www.groov ... -
Groovy grep的应用:对得出的数据列表集合进行过滤
2010-01-13 11:41 1972对得出的数据列表集合进行过滤: de ...
相关推荐
如果你在Groovy Shell或 Geb 测试框架中,你可以使用内建的`groovy.json.JsonSlurper`和`groovy.net.http.HTTPBuilder`结合的`RestClient`,这非常适合简单的REST API调用: ```groovy import groovyx.net....
Groovy的HTTPBuilder是一个方便的库,用于简化HTTP请求。在处理URL时,它可以自动处理编码。例如,`new HTTPBuilder("http://localhost:18080").request(Method.GET) {uri.path = "/foo bar"}`,HTTPBuilder会自动...
4. **RESTful API**:为了与其他系统交互,图书馆系统可能提供了一组RESTful API,使用Groovy的HTTP客户端库(如HTTPBuilder或RestClient)来接收和响应HTTP请求,实现图书的查找、预订和归还等功能。 5. **命令行...
Picasso 是一个由 Square 公司开发的 Android 图片加载库,它简化了在 Android 应用程序中加载、缓存和显示网络或本地资源图片的操作。这款强大的工具提供了丰富的功能,如图片的缩放、裁剪、旋转以及错误处理,使得...
Picasso支持多种数据源(如网络URL、资源ID等),并且提供了丰富的配置选项,比如缓存策略、转换操作等。它的主要优点包括:自动处理内存和磁盘缓存、支持动态图片变换以及简洁的API设计。 #### 自定义缓存位置 ...
3. **图片下载**:使用DownZ进行图片资源的下载和缓存。 4. **文件上传**:上传用户产生的数据,如照片、文本文件等。 5. **API调用**:对接RESTful API,获取JSON或其他格式的响应数据。 ### 总结 DownZ库通过其...
在开始之前,确保你已经了解了基本的 RESTful 架构概念,它使用 HTTP 方法(GET、POST、PUT、DELETE 等)来操作资源。Weather API 是一个提供天气信息的 RESTful 服务,通常需要 API 密钥进行身份验证。 1. **集成 ...
通常,我们会在需要显示图片的视图(如ImageView)上使用`Glide.with()`方法来加载网络或本地资源图片。例如,加载一个网络图片: ```java Glide.with(this) .load("http://example.com/image.jpg") .into...
2. **自定义placeholder、failure、retry等图**:通过`GenericDraweeHierarchyBuilder`设置不同的图片资源。 3. **动画支持**:可以添加过渡动画,使图片显示更生动。 4. **自定义处理器**:对图片进行裁剪、缩放等...
此外,为了优化性能和内存使用,你可以考虑在不需要显示GIF时释放资源: ```java gifDrawable.release(); ``` 在实际应用中,可能需要自定义ImageView来处理触摸事件,如暂停、恢复动画等。你还可以根据需求调整...
Retrofit2是一款在Android开发中广泛使用的网络请求库,它由Square公司开发,以其简洁的API设计和强大的功能深受开发者喜爱。在这个"Retrofit2 Demo源码"中,我们可以深入理解Retrofit2如何处理各种类型的网络请求,...
**OKHttp.jar包 3.4.1 下载** 在Android开发中,网络请求是必不可少的部分,而OKHttp是一款高效、强大的网络请求库,由Square...在使用OKHttp 3.4.1版本时,了解其特性并合理利用,可以让你的网络操作更加高效和可靠。
```groovy dependencies { implementation 'com.baidu.mapapi.map:map:5.3.0' } ``` 记得同步项目以使依赖生效。 3. **配置权限**:在AndroidManifest.xml文件中添加必要的权限,如访问网络、读写外部存储...
通过`Retrofit.Builder().addCallAdapterFactory(RxJava2CallAdapterFactory.create())`,可以在Retrofit中使用RxJava进行异步数据处理,极大地提高了代码的优雅性和可读性。 #### 七、Retrofit实战案例 在给定的...
首先,理解GET请求的基本概念:GET是HTTP协议中最简单、最常用的一种请求方法,用于从服务器获取资源。在URL中直接附带参数,所有数据都在URL中可见,适用于获取少量、不敏感的数据。 1. **添加网络权限**: 在...
这个AK是连接我们应用与百度地图服务的关键,必须正确配置才能正常使用地图功能。 集成百度地图SDK: 1. 下载百度地图Android SDK:从官方平台下载最新的SDK包,并将其添加到项目的libs目录下。 2. 在项目的build....
```groovy dependencies { // ... implementation 'com.twitter.sdk.android:twitter-core:3.3.0' } ``` 接着,确保你的应用已经注册并获得了Twitter开发者账号,创建一个应用,并获取到API Key和API Secret Key...
```groovy dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.3' // 检查并使用最新版本 } ``` 然后,同步项目以下载和安装这个库。 接下来,我们创建一个简单的网络请求。首先,定义一个 `...
OkHttp-3.12.8.jar 是 OkHttp 库的一个特定版本,包含了所有必要的类和资源文件,用于集成到 Java 项目中。这个版本发布于较早的时间,可能不包含最新特性或安全更新,但依然被许多项目所使用。如果你的新项目需要...
描述中的“弹簧伸缩靴”可能是对“spring-flex-boot”的中文翻译,而“flex groovy spring-boot spring-flex”暗示了项目中可能包含了Groovy语言的使用,Groovy是一种在Java平台上运行的动态编程语言,常与Spring...