最近项目中需要调用其他项目的Rest接口,之前一直在使用Apache的httpclient工具,该工具使用起来不是很方便,各种try{......} catch{......}结构,造成了代码量很大,而且有实际意义的代码却很少。

最近请教别人,学习使用RESTEasy工具,进行调用REST接口,极大地减少了调用Rest接口的代码,项目中仅需要一个RestEasyClient.java工具类即可,其他package中是需要调用REST接口时,仅需要直接调用即可,代码中仅有一个try{......} catch{......},很好的维护了项目代码的整洁和实用。

1.实战

RESTEasy的Maven依赖:

 <dependency><groupId>org.jboss.resteasy</groupId><artifactId>jaxrs-api</artifactId><version>3.0.7.Final</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jaxrs</artifactId><version>3.0.19.Final</version><!--<scope>provided</scope>--></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-client</artifactId><version>3.0.19.Final</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-multipart-provider</artifactId><version>3.0.19.Final</version><scope>provided</scope></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jackson2-provider</artifactId><version>3.0.19.Final</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-servlet-initializer</artifactId><version>3.0.19.Final</version></dependency>

RestEasyClient.java工具类:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.Response;
import java.util.Map;
import java.util.concurrent.TimeUnit;/*** Created by lance.*/
@Slf4j
public class RestEasyClient {private static ResteasyClient client = null;static {ResteasyClientBuilder resteasyClientBuilder = new ResteasyClientBuilder();resteasyClientBuilder.connectionPoolSize(300);resteasyClientBuilder.socketTimeout(5, TimeUnit.SECONDS);resteasyClientBuilder.maxPooledPerRoute(200);client = resteasyClientBuilder.build();}/*** @param url url地址参数* @return*/public static JSONObject get(String url, Map<String, Object> headers) {Response response = null;try {ResteasyWebTarget target = client.target(url);Invocation.Builder builder = target.request();if (null != headers && !headers.isEmpty()) {headers.entrySet().forEach(entry -> builder.header(entry.getKey(), entry.getValue()));}response = builder.get();if (response != null) {JSONObject jsonObject = response.readEntity(JSONObject.class);log.info("http get result:{}", JSON.toJSONString(jsonObject));return jsonObject;}} catch (Exception e) {log.error("client.get() Error, url:{}", url);log.error("client.get() Error", e);} finally {if (response != null) {try {response.close();} catch (Exception e) {log.error("client.close() Error", e);}}}return new JSONObject();}/*** @param url       url地址参数* @param headers   请求中的header参数* @param entity    请求的具体参数内容* @param mediaType 之情请求的类型,如json* @return*/public static JSONObject post(String url, Map<String, Object> headers, Object entity, String mediaType) {log.info("client.post() INFO, url:{}, headers:{}, entity:{}, mediaType:{}", url, headers, entity, mediaType);Response response = null;try {ResteasyWebTarget target = client.target(url);Invocation.Builder builder = target.request();if (null != headers && !headers.isEmpty()) {headers.entrySet().forEach(entry -> builder.header(entry.getKey(), entry.getValue()));}response = builder.post(Entity.entity(entity, mediaType));if (response != null) {JSONObject jsonObject = response.readEntity(JSONObject.class);log.info("http get result:{}", JSON.toJSONString(jsonObject));return jsonObject;}} catch (Exception e) {log.error("client.post() Error, url:{}, headers:{}, entity:{}, mediaType:{}", url, headers, entity, mediaType);log.error("client.post() Error", e);} finally {if (response != null) {try {response.close();} catch (Exception e) {log.error("client.close() Error", e);}}}return new JSONObject();}

Test类:

public class Test {public static void main(String[] args) {//get testMap map = RestEasyClient.get("http://10.118.32.254:8801/data/rest/");log.info("response:{}",map);//post testMap<String, Object> header = Maps.newHashMap(); header.put("userId", "1000");Object item = new Object(); Map map = RestEasyClient.post("http://10.118.32.254:8801/data/rest/", header, Sets.newHashSet(item), MediaType.APPLICATION_JSON);log.info("response:{}", map);}}

RestEasy 调用Rest接口使用详解相关推荐

  1. Thrift实现C#调用Java开发步骤详解

    概述 Thrift实现C#调用Java开发步骤详解 详细 代码下载:http://www.demodashi.com/demo/10946.html Apache Thrift 是 Facebook ...

  2. 微信JS-SDK之图像接口开发详解

    2019独角兽企业重金招聘Python工程师标准>>> 参考: 微信JS-SDK之图像接口开发详解 http://www.cnblogs.com/it-cen/p/4587812.h ...

  3. 2接口详解_TS入门笔记2——TS接口进阶详解

    TS入门笔记--TS接口进阶详解 一.为什么需要接口? let obj:object; // 定义了一个只能保存对象的变量 // obj = 1; // obj = "123"; ...

  4. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  5. 转 LCD的接口类型详解

    LCD的接口类型详解 LCD的接口有多种,分类很细.主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式, ...

  6. python函数定义及调用-python函数声明和调用定义及原理详解

    这篇文章主要介绍了python函数声明和调用定义及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数是指代码片段,可以重复调用,比如我们前 ...

  7. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  8. ILI9341的使用之【四】RGB接口操作详解

    <ILI9341的使用之[一]TFT-LCD原理(转载)> <ILI9341的使用之[二]ILI9341介绍> <ILI9341的使用之[三]ILI9341系统通信接口模 ...

  9. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

最新文章

  1. 洛谷2766:[网络流24题]最长不下降子序列问题——题解
  2. 针对各组项目的改进意见
  3. android 富文本框架_五种JavaScript富文本编辑器,总有一款适合你
  4. GDCM:cmyk的Png文件转dicom文件的测试程序
  5. VTK:几何对象之ParametricObjects
  6. 为什么做技术 PM 这么难?
  7. Qt中基类widget的各个事件函数中包含了ignore()的调用
  8. zzulioj 1065:统计数字字符个数
  9. bzoj1070 [SCOI2007]修车 费用流+拆分
  10. 【英语学习】【WOTD】valetudinarian 释义/词源/示例
  11. 刚刚做完的一个屏幕截图程序,分享一下
  12. 多领域合作 浪潮与美亚柏科赋能信息安全
  13. javafx将数据库内容输出到tableview表格
  14. 20款优秀的可以替代桌面软件的Web应用(转载自JavaEye)
  15. 会声会影制作转场特效及视频转场的应用
  16. TP6多应用部署简单的个人总结--第一篇【原创】
  17. uniapp获取经纬度
  18. PS模仿欢乐颂电视剧海报的水彩效果
  19. android 11.0 12.0去掉前置摄像头闪光灯功能
  20. linux中gnuplot给定文本,Gnuplot (三)输出图片/字体支持、eps/png/pdf/enhanced文本

热门文章

  1. RollBack Rx Professional RMC 安装教程
  2. linux禁用垂直同步,禁用glxgears的垂直同步
  3. np.meshgrid函数解读
  4. mac版eclipse快捷键总结
  5. 查询单个商品,分页展示商品
  6. 爬虫练习-爬取豆瓣音乐TOP250的数据
  7. Java Random随机数
  8. unordered_multimap学习之查找操作和观察器操作count,find, contains(C++20),equal_range,hash_function, key_eq
  9. CodeMirror踩坑
  10. 微信小程序合集5(便利小店+豆瓣同城+仿爱卡汽车+仿斗鱼直播+解梦)