`
hugh.wangp
  • 浏览: 292970 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自整理手册Jersey Client API

    博客分类:
  • JAVA
阅读更多

 

 

参考Jersey的文档http://jersey.java.net/nonav/documentation/latest/client-api.html
 
整理自己使用的手册,同时希望能给大家也带来便利
使用Jersey Client API的步骤
1.创建一个Client的实例
Client c = Client.create();
 2.配置Client参数(通过getProperties方法或者一些setter方法)
c.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
or
c.setFollowRedirects(true);
or
在创建Client实例时利用ClientConfig配置参数
ClientConfig cc = new DefaultClientConfig();
cc.setFollowRedirects(true);
Client c = Client.create(cc);
 3.创建完Client实例后,接下来就要获取一个WebResource实例
WebResource r = c.resource("http://localhost:8080/xyz");
 4.建立一个请求(request)
建立对Web资源的请求需要使用builder pattern(RequestBuilder)和HTTP方法(UniformInterface)
String response = r.accept(MediaType.APPLICATION_JSON_TYPE,MediaType.APPLICATION_XML_TYPE)
                .header("X-FOO", "BAR")
                .get(String.class);
 这段代码:发送了一个Get请求,带有一个Accept header( application/json, application/xml)和一个非标准的header(X-FOO of BAR)如果一个请求需要获取一个entity or representation则需要调用HTTP方法的PUT、POST、DELETE
String request = "content";
String response = r.accept(MediaType.APPLICATION_JSON_TYPE,MediaType.APPLICATION_XML_TYPE)
                .header("X-FOO", "BAR")
                .post(String.class, request);
 这里的String "content"被序列化成一个request entity。除了此方法,也可用type builder方法来声明request entity的Content-Type
String response = r.accept(MediaType.APPLICATION_JSON_TYPE,MediaType.APPLICATION_XML_TYPE)
                .header("X-FOO", "BAR")
                .type(MeidaType.TEXT_PLAINT_TYPE)
                .post(String.class, request);
 or 使用entity方法去声明entity和type
String response = r.accept(MediaType.APPLICATION_JSON_TYPE,MediaType.APPLICATION_XML_TYPE)
                .header("X-FOO", "BAR")
                .entity(request, MediaType.TEXT_PLAIN_TYPE)
                .post(String.class, request);
 5.接受响应
如果有需要一个response meta-data,可以声明一个ClientResponse去获取一个响应的status,header,entity
ClientResponse response = r.get(ClientResponse.class);
EntityTag e = response.getEntityTag();
String entity = response.getEntity(String.class);
 如果没有使用ClientResponse,并且响应状态>=300,那么就会抛出一个runtime exception UniformInterfaceException
try {
        String entity = r.get(String.class);
} catch (UniformInterfaceException ue) {
        ClientResponse response = ue.getResponse();
}
 6.在现有WebResouce基础上创建新的WebResouce
通过传入新的URI,可以在一个已存在的WebResource上在创建请求前创建一个新的WebResource
WebResource r = c.resource("http://localhost:8080/xyz");
MultivalueMap<String, String> params = new MultivalueMapImpl();
param.add("foo", "x");
param.add("bar", "y");
String response = r.path("abc").queryParams(param).get(String.class);
 这段代码对URI"http://localhost:8080/xyz/abc?foo=x&bar=y"申请一个GET请求
7.representations的java实例和类型
Jersey server端支持的java类型在client端同样适用,包括JAX-RS支持的ava类型(bytes[], String, InputStream, Reader, File, javax.activation.DataSource, javax.xml.transform.Source, StreamingOoutput)和jersey支持的JSON, ATOM和Multipart MIME

 

 

0
3
分享到:
评论
1 楼 空谷悠悠 2014-09-17  
jersey文档中提到:
Client instances are expensive resources. It is recommended a configured instance is reused for the creation of Web resources
这也是我关注的问题,如何保证避免每次调用资源去重新new一个client对象,文档中也给出了配置实例方案
ClientConfig cc = new DefaultClientConfig();
    cc.getProperties().put(
        ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
    Client c = Client.create(cc);

源码中Client.create(cc)静态方法中也是new的一个client,这里每次仍去创建一个新的对象了,貌似没有避免我上面提到的问题。
Q:jersey有实现避免重复创建client的方案吗?有,如果实现呢?

相关推荐

    jersey-client-2.22.2-API文档-中文版.zip

    赠送原API文档:jersey-client-2.22.2-javadoc.jar; 赠送源代码:jersey-client-2.22.2-sources.jar; 赠送Maven依赖信息文件:jersey-client-2.22.2.pom; 包含翻译后的API文档:jersey-client-2.22.2-javadoc-API...

    jersey-client-2.22.2-API文档-中英对照版.zip

    赠送原API文档:jersey-client-2.22.2-javadoc.jar; 赠送源代码:jersey-client-2.22.2-sources.jar; 赠送Maven依赖信息文件:jersey-client-2.22.2.pom; 包含翻译后的API文档:jersey-client-2.22.2-javadoc-API...

    jersey-client-1.19-API文档-中文版.zip

    赠送原API文档:jersey-client-1.19-javadoc.jar; 赠送源代码:jersey-client-1.19-sources.jar; 赠送Maven依赖信息文件:jersey-client-1.19.pom; 包含翻译后的API文档:jersey-client-1.19-javadoc-API文档-...

    jersey-client-1.9-API文档-中文版.zip

    赠送原API文档:jersey-client-1.9-javadoc.jar; 赠送源代码:jersey-client-1.9-sources.jar; 赠送Maven依赖信息文件:jersey-client-1.9.pom; 包含翻译后的API文档:jersey-client-1.9-javadoc-API文档-中文...

    jersey-client-1.19-API文档-中英对照版.zip

    赠送原API文档:jersey-client-1.19-javadoc.jar; 赠送源代码:jersey-client-1.19-sources.jar; 赠送Maven依赖信息文件:jersey-client-1.19.pom; 包含翻译后的API文档:jersey-client-1.19-javadoc-API文档-...

    jersey-core、jersey-client jar包.rar

    然后,使用jersey-client的API创建一个请求实体,将文件内容附加到请求中。此外,可能还需要处理文件元数据,如文件名、大小等,并将其作为请求的一部分传递。最后,发送请求并捕获响应,确保文件成功上传并检查返回...

    Jersey Client jar

    `Jersey Client` 是一个强大的库,它是 `Java API for RESTful Web Services (JAX-RS)` 规范的官方实现之一,专为客户端应用程序设计,使得开发者能够方便地与RESTful Web服务进行交互。在本文中,我们将深入探讨 `...

    springmvc远程上传文件jersey-client

    而Jersey Client则是Java RESTful Web服务客户端库,它允许我们与RESTful API进行交互,包括上传文件。在这个场景中,我们将探讨如何在Spring MVC中利用Jersey Client实现远程文件上传功能。 首先,我们需要理解...

    RESTful webservices – Client API in Java - Jersey

    而客户端API则通过`jersey-client`模块实现,可以轻松地与RESTful服务进行交互。 - **服务器端**: - 使用`@Path`注解定义资源路径。 - 使用`@GET`、`@POST`等注解定义HTTP方法。 - 使用`@Produces`、`@Consumes...

    flink依赖jar包——解决NoClassDefFoundError: com/sun/jersey

    Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig at org.apache.hadoop.yarn.client.api.TimelineClient.createTimelineClient(TimelineClient.java:...

    jersey-client-1.9-API文档-中英对照版.zip

    赠送原API文档:jersey-client-1.9-javadoc.jar; 赠送源代码:jersey-client-1.9-sources.jar; 赠送Maven依赖信息文件:jersey-client-1.9.pom; 包含翻译后的API文档:jersey-client-1.9-javadoc-API文档-中文...

    Jersey 1.18 API CHM文档

    Jersey 1.18 API CHM文档, 我制作的, 原创.

    flink需要的jersey-core和jersey-client

    如果flink提交jar到yarn上运行报如下错误:java.lang.NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties,在flink的lib包里面添加这两个jar包

    jersey-client、jersey-core

    jersey-client-2.2.jar、jersey-core-1.9.jar来实现RESTful 框架

    Jersey client+servet Demo

    【标题】:“Jersey client+servet Demo” 在IT领域,开发RESTful Web服务是常见的任务,而Jersey是Java平台上的一个开源框架,专门用于实现RESTful(Representational State Transfer)服务。本Demo展示了如何使用...

    flink on yarn 缺少依赖NoClassDefFoundError: com/sun/jersey

    flink-hadoop-compatibility_2.12-1.7.1.jar javax.ws.rs-api-2.0.1.jar jersey-common-2.27.jar ...Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig

    jersey-client-1.0.3.jar

    jersey-client-1.0.3.jar

    jersey用户手册-2.22.1.pdf

    从提供的文件信息来看,这是一份关于Jersey框架的用户手册,版本为2.22.1。Jersey是一个开源的RESTful框架,它遵循JAX-RS(Java API for RESTful Web Services)规范,用于构建基于Java的Web服务。以下是根据文件...

    jersey-server-2.22.2-API文档-中文版.zip

    包含翻译后的API文档:jersey-server-2.22.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.glassfish.jersey.core:jersey-server:2.22.2; 标签:glassfish、core、server、jersey、jar包、java、中文文档; ...

    jersey-client-1.9.jar

    jersey-client-1.9.jar包

Global site tag (gtag.js) - Google Analytics