本文共 3795 字,大约阅读时间需要 12 分钟。
一、今天发现了需要用到一个Post,来发送JSON请求的工具类,找了蛮多网上的东西,想找一个简介好用的,一直找不到。那么就自己写一个咯。
二、假设你想发送一个这样的请求:
http.post{ "jsonrpc":"2.0", "id":int32, "method":"Chain33.GenSeed", "params":[{ "lang":int32}] }
三、你想收到这样的一个请求
response{ "id":int32, "result": { "seed": "fit lava clock valley leisure kit sketch voice venue ski eye apart unfair inch page cannon" }}
四、首先需要引入一个包: com.squareup.okhttp3
com.squareup.okhttp3 okhttp 3.10.0
五、首先定义了一个接口
/** * @author:wangdong * @description:调用区块链那边的Service */public interface BlockchainService { /** * 调用区块链那边,获取生成公钥和私钥的Seed * @return */ String getBlockchainSend();}
六、定义一个实现类
@Override public String getBlockchainSend() { List
七、定义一个postCall接口
package com.gws.utils.webservice;import com.alibaba.fastjson.JSONObject;/** * @author wangdong */public interface HttpService { /** * Http服务间调用,Json的请求 * @param baseUrl * @param jsonBody * @return */ JSONObject postCall(String baseUrl, String jsonBody);}
八、定义一个postCall的实现类
package com.gws.utils.webservice.impl;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.gws.utils.http.HTTP;import com.gws.utils.webservice.HttpService;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import java.io.IOException;/** * Created by wangdong on 7/18/16. */public class HttpServiceImpl implements HttpService { @Autowired private HTTP http; /** * Http服务间调用,Json的请求 * @param baseUrl * @param jsonBody * @return */ @Override public JSONObject postCall(String baseUrl, String jsonBody) { if (StringUtils.isEmpty(baseUrl)){ throw new IllegalArgumentException("远程调用请求错误,baseUrl不能为空"); } JSONObject jsonObject = null; try { byte[] bytes = post(baseUrl, jsonBody); return JSON.parseObject(new String(bytes)); } catch (IOException e) { } return jsonObject; }}
九、看一下 byte[] bytes = post(baseUrl, jsonBody);是怎么实现的
/** * * POST极简同步方法,JSON内容 * * @author wangdong 2016年7月17日 * @param url * @param jsonBody * @return * @throws HttpGwsException * @throws IOException */ @Override public byte[] post(String url, String jsonBody) throws HttpGwsException,IOException { RequestBody body = RequestBody.create(MEDIA_JSON, jsonBody); Request request = new Request.Builder() .url(url) .post(body) .build(); Response response =ReqExecute(request); if (!response.isSuccessful()) { throw new HttpGwsException(response,"exception code:" + response.code()); } return response.body().bytes(); }
十、RequestBody引用的是com.squareup.okhttp3中的包。
好啦,来测试一些。 最后返回出来的结果:十一、返回出去
@RequestMapping("getBlockchainSend") public JsonResult getBlockchainSend(){ String result = blockchainService.getBlockchainSend(); return success(result); }
十二、最终结果
十三、祝大家工作顺利开心。