spring boot + jersey (非spring mvc)使用jersey client发送http post请求,并获取响应

依赖:

<!-- 使用jersey RESTful 框架 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>

实现JerseyClientUtil工具类(实现post和get请求):

import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.JerseyClient;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Map;

/**
 * 作用:使用jerseyclient发送http请求。
 * 主要用于调用老平台接口(非微服务架构的)
 */
public class JerseyClientUtil {

    private Client client;

    JerseyClientUtil(){}

    /**
     * 静态内部类实现单例模式
     */
    private static class Singleton{
        private static final JerseyClientUtil jerseyClientUtil = new JerseyClientUtil();
    }

    /**
     * 获取单例JerseyClientUtil
     * @return
     */
    public static JerseyClientUtil getJerseyClientUtil(){
        return Singleton.jerseyClientUtil;
    }


    /**
     * 初始化默认的clint对象
     */
    private void setDefaultClient(){
        this.client =  ClientBuilder.newClient();
    }


    /**
     * 根据传入的ClientConfig对象初始化client对象
     * @param config
     */
    private void setConfigClient(ClientConfig config){
        this.client =  ClientBuilder.newClient(config);
    }

    /**
     * 根据ClientConfig初始化Client
     * @param config
     */
    private void initClient(ClientConfig config){
        if(config != null){
            this.setConfigClient(config);
        }else {
            this.setDefaultClient();
        }
    }

    /**
     * 发送http post请求,返回服务器响应信息
     * @param url 请求的URL
     * @param form 发送的form对象
     * @param config jerseyclient实例的配置信息,可以为空
     * @param tClass 根据此类型处理返回实体
     * @return response Response对象
     */
    public <T> T postInvoke(String url, Form form, ClientConfig config,Class<T> tClass){

        //初始化Client
        this.initClient(config);

        //发送POST的请求
        //应该对响应实体类进行处理,这样链接才能关闭和回收
        //官方:(https://jersey.github.io/documentation/latest/client.html#d0e5255)The underlying connections are opened for each request and closed after the response is received and entity is processed (entity is read).
        Response response = client.target(url).request(MediaType.APPLICATION_FORM_URLENCODED)
                .post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE));
        T resultObject = response.readEntity(tClass);
        return resultObject;
    }

    /**
     * 发送http get请求,返回服务器响应信息
     * @param url 请求的URL
     * @param param 参数map
     * @param config jerseyclient实例的配置信息,可以为空
     * @param tClass 根据此类型处理返回实体
     * @return response Response对象
     */
    public <T> T getInvoke(String url, Map<String,Object> param, ClientConfig config, Class<T> tClass){

        //初始化Client
        this.initClient(config);
        WebTarget webTarget = client.target(url);
        //添加参数
        for(String key : param.keySet()){
            webTarget = webTarget.queryParam(key,param.get(key));
        }

        T resultObject = webTarget.request().get(tClass);

        return resultObject;

    }


}

 

使用:

@GET
@Path("/sendMessage")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public ResultBean sendMessage(@Content HttpServletRequest request,@QueryParam("phone") String phone){
    //组合参数
    Form from = new Form();
    from.param("phone",phone);
    String response = JerseyClientUtil.getJerseyClientUtil()
            .postInvoke("**************************",
                    from,null,String.class);
    ResultBean resultBean  = new ResultBean(response);
    return resultBean;
}

 

 

老接口的访问方式:

134524_Oiig_3295928.png

老接口内容:

134235_t77k_3295928.png

 

转载于:https://my.oschina.net/u/3295928/blog/1798903

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值