贡献一个极简的Post请求发送JSON请求的工作类(亲测有效。其余网上其他都是好多不能用)

简介: 一、今天发现了需要用到一个Post,来发送JSON请求的工具类,找了蛮多网上的东西,想找一个简介好用的,一直找不到。那么就自己写一个咯。

一、今天发现了需要用到一个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
这里写图片描述

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.10.0</version>
</dependency>

五、首先定义了一个接口

/**
 * @author:wangdong
 * @description:调用区块链那边的Service
 */
public interface BlockchainService {

    /**
     * 调用区块链那边,获取生成公钥和私钥的Seed
     * @return
     */
    String getBlockchainSend();
}

六、定义一个实现类

    @Override
    public String getBlockchainSend() {

        List<Object> list = new ArrayList<>();
        SeedParams seedParams = new SeedParams();
        seedParams.setLang(1);
        list.add(seedParams);
        Map<String, Object> params = new HashMap<>();
        params.put("jsonrpc", "2.0");
        params.put("id", 1);
        params.put("method", "Chain33.GenSeed");
        params.put("params", list);
        String jsonBody = JSONObject.toJSONString(params);

        JSONObject result = httpService.postCall(apiBlockchainervice,jsonBody);
        JSONObject seedDate = (JSONObject) result.get("result");
        return seedDate.get("seed").toString();
    }
}

七、定义一个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);
    }

十二、最终结果
这里写图片描述

十三、祝大家工作顺利开心。

目录
相关文章
|
1月前
|
XML JSON 安全
SSM:请求参数与回显&json
本文介绍了请求参数处理、过滤器和拦截器的使用方法。包括如何通过 `@RequestParam` 和 `@ModelAttribute` 绑定请求参数,使用 Lombok 简化实体类开发,实现过滤器处理字符编码,以及配置拦截器进行请求前后的处理。同时,还展示了如何使用 `@ResponseBody` 返回 JSON 数据,并解决了 JSON 编码问题。
|
1月前
|
JSON API 数据格式
postman如何发送json请求其中file字段是一个图片
postman如何发送json请求其中file字段是一个图片
130 4
|
1月前
|
JSON 数据格式
用来返回Json数据格式的工具--通用类
用来返回Json数据格式的工具--通用类
19 1
|
1月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
87 2
|
2月前
|
JSON API 数据格式
使用Python发送包含复杂JSON结构的POST请求
使用Python发送包含复杂JSON结构的POST请求
|
1月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
69 1
|
1月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
372 0
|
30天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
15天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
19天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。