RestEasy 调用Rest接口使用详解

来源:互联网 发布:中科院软件研究所待遇 编辑:程序博客网 时间:2024/04/29 18:18

最近项目中需要调用其他项目的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 lombok.extern.slf4j.Slf4j;import org.apache.commons.collections.MapUtils;import org.apache.commons.lang3.StringUtils;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;/** * Created by zhangzh on 2016/12/28. */@Slf4j  //此处用到了lombokpublic class RestEasyClient {    /**     *     * @param url  url地址参数     * @return     */    public static Response get(String url) {        ResteasyClient client = new ResteasyClientBuilder().build();        try {            ResteasyWebTarget target = client.target(url);            Invocation.Builder builder = target.request();            return builder.get();        } catch (Exception e) {            log.error("RESTEasyClient.post() Error, url:{}", url);            log.error("RESTEasyClient.post() Error", e);            return Response.serverError().build();        }    }    /**     *     * @param url  url地址参数     * @param headers  请求中的header参数     * @param entity   请求的具体参数内容     * @param mediaType  之情请求的类型,如json     * @return     */    public static Response post(String url, Map<String, Object> headers, Object entity, String mediaType) {        log.info("RESTEasyClient.post() INFO, url:{}, headers:{}, entity:{}, mediaType:{}", url, headers, entity, mediaType);        ResteasyClient client = new ResteasyClientBuilder().build();        Response response;        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));            return response;        } catch (Exception e) {            log.error("RESTEasyClient.post() Error, url:{}, headers:{}, entity:{}, mediaType:{}", url, headers, entity, mediaType);            log.error("RESTEasyClient.post() Error", e);            return Response.serverError().build();        }    }}




Test类

Test.java

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


  



0 0