RestEasy 调用Rest接口使用详解[通俗易懂]

RestEasy 调用Rest接口使用详解[通俗易懂]RestEasy 调用Rest接口使用详解

大家好,又见面了,我是你们的朋友全栈君。

        最近项目中需要调用其他项目的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 test
	 Map map = RestEasyClient.get("http://10.118.32.254:8801/data/rest/");
         log.info("response:{}",map);
	 
	 
	 
	 
	//post test
	Map<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);
	
	}
	
}






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149577.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • AvalonDock 2.0 的简单运用

    AvalonDock 2.0 的简单运用最近在研究AvalonDock的一些使用,碰到了一些问题。现在拿出来跟大家分享分享。网上找了一大把AvalonDock1.3版本的资料,弄出Demo后发现属性面板(DockableContent)设置成浮动后不能停靠其它的面板。最后只得试试AvalonDock2.0版本的,还好2.0版本没让我们失望。首先需要库文件:Xceed.Wpf.AvalonDock…

  • 分布式Session共享解决方案「建议收藏」

    Session是服务器用来保存用户操作的一系列会话信息,由Web容器进行管理。单机情况下,不存在Session共享的情况,分布式情况下,如果不进行Session共享会出现请求落到不同机器要重复登录的情况,一般来说解决Session共享有以下几种方案。1、session复制session复制是早期的企业级的使用比较多的一种服务器集群session管理机制。应用服务器开启web容器的sessi…

  • java linkhashset_java中集合怎么定义

    java linkhashset_java中集合怎么定义LinkedHashSet是Set集合的一个实现,具有set集合不重复的特点,同时具有可预测的迭代顺序,也就是我们插入的顺序。并且linkedHashSet是一个非线程安全的集合。如果有多个线程同时访问当前linkedhashset集合容器,并且有一个线程对当前容器中的元素做了修改,那么必须要在外部实现同步保证数据的冥等性。下面我们new一个新的LinkedHashSet容器看一下具体的源码实现。…

    2022年10月12日
  • linux系统重启网卡命令_centos 7重启网卡命令

    linux系统重启网卡命令_centos 7重启网卡命令大家在实际工作中,经常会遇到Linux系统进行重启网卡的操作,那么具体如何进行重启呢?下面就由学习啦小编跟大家分享一下操作步骤吧,希望对大家有所帮助~linux系统重启网卡的方法一、servicenetworkrestart1、首先用CRT工具连接到Linux命令行界面。或者进入操作系统界面,选择终端输入。2、如果我们对所有的网卡进行重启操作。可以尝试输入:servicenetwork…

  • 常用#免费%代理IP库&整理*收藏——实时@更新(大概)

    常用#免费%代理IP库&整理*收藏——实时@更新(大概)常用免费代理IP库整理收藏——实时更新(大概)写在前面:仅整理交流分享,无任何商业用途,如有侵权请私信联系博主增删改查!!!如果还有其他好的免费代理网站,欢迎评论区留言交流,会实时更新到文章中;如有已经失效的也欢迎私信留言,博主会及时修改反馈!!!代理IP是什么代理IP,又称代理服务器,是网络信息的中转站,它是介于浏览器和Web服务器之间的一台服务器。Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。代理IP的类型代理类型大致分为.

  • 讨论关于RAID以及RAID对于存储的影响

    讨论关于RAID以及RAID对于存储的影响

    2021年11月24日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号