java HttpClient传输json格式的参数实例讲解

 更新时间:2021年01月21日 10:57:46   作者:乔叶叶  
这篇文章主要介绍了java HttpClient传输json格式的参数实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近的一个接口项目,传的参数要求是json,需要特殊处理一下。

重点是这两句话:

httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
se.setContentType(CONTENT_TYPE_TEXT_JSON);

这两句话的作用与jmeter的设置header信息类似

package com.base;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.util.EntityUtils;
/** 
 * @author QiaoJiafei 
 * @version 创建时间:2015年11月4日 下午1:55:45 
 * 类说明 
 */
public class HttpGetByJson {
 public static void main(String args[]) throws Exception{
  final String CONTENT_TYPE_TEXT_JSON = "text/json";
  DefaultHttpClient client = new DefaultHttpClient(
   new PoolingClientConnectionManager());
  
  String url = "http://172.16.30.226:8091/svc/authentication/register";
 String js = "{\"userName\":\"18600363833\",\"validateChar\":\"706923\",\"randomChar\":\"706923\",\"password\":\"123456\",\"confirmPwd\":\"123456\",\"recommendMobile\":\"\",\"idCard\":\"320601197608285792\",\"realName\":\"阙岩\",\"verifyCode\"}";
  
 HttpPost httpPost = new HttpPost(url); 
 httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
  
 StringEntity se = new StringEntity(js);
 se.setContentType(CONTENT_TYPE_TEXT_JSON);
 httpPost.setEntity(se);
 
 CloseableHttpResponse response2 = null;
 
 response2 = client.execute(httpPost);
 HttpEntity entity2 = null;
 entity2 = response2.getEntity();
 String s2 = EntityUtils.toString(entity2, "UTF-8");
 System.out.println(s2);
 }
 
}

补充:HttpClient以json形式的参数调用http接口并对返回的json数据进行处理(可以带文件)

1、参数的url就是被调用的地址,map是你要传的参数。参数转成json我使用的是gson方式转换的。

主要使用的jar包有httpclient-4.5.3.jar、httpcore-4.4.6.jar、commons-codec-1.9.jar、gson-2.2.4.jar和commons-logging-1.2.jar。

如果发送的post请求想传送文件,需添加httpmime-4.5.3.jar包,并设置如下代码:

HttpEntity multipartEntityBuilder = MultipartEntityBuilder.create().addBinaryBody("file", new File("D:\\workspace\\programm\\WebContent\\programm\\1991.zip")).build();

第一个参数表示请求字段名,第二个参数就是文件。

还想添加参数则

HttpEntity multipartEntityBuilder = MultipartEntityBuilder.create().addTextBody("name", "张三").addBinaryBody("file", new File("D:\\workspace\\programm\\WebContent\\programm\\1991.zip")).build();
httpPost.setEntity(multipartEntityBuilder);
import java.io.IOException;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.google.gson.Gson;
public class HttpClientUtil {
 
 private final static String CONTENT_TYPE_TEXT_JSON = "text/json";
 
 public static String postRequest(String url, Map<String, Object> param) throws ClientProtocolException, IOException{
 
 CloseableHttpClient client = HttpClients.createDefault();
 HttpPost httpPost = new HttpPost(url);
 httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
 
 Gson gson = new Gson();
 String parameter = gson.toJson(param);
 StringEntity se = new StringEntity(parameter);
 se.setContentType(CONTENT_TYPE_TEXT_JSON);
 httpPost.setEntity(se);
 CloseableHttpResponse response = client.execute(httpPost);
 HttpEntity entity = response.getEntity();
 String result = EntityUtils.toString(entity, "UTF-8");
 
 return result;
 }
}

2、返回的结果也可以使用gson转换成对象进行下一步操作。

import com.google.gson.Gson;
public class GsonUtil {
 public static <T> T jsonToObject(String jsonData, Class<T> type) {
 Gson gson = new Gson();
 T result = gson.fromJson(jsonData, type);
 return result;
 }
 
 public static void main(String[] args) {
 String json = "{'id':'1','name':'zhang','address':'Hubei'}";
 jsonToObject(json, Person.class);
 Person person = jsonToObject(json, Person.class);
 System.out.println(person);
 }
}

建立要转成的对象的类。

import java.util.Date;
public class Person {
 
 private int id;
 
 private String name;
 
 private int age;
 
 private String address;public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public int getAge() {
 return age;
 }
 public void setAge(int age) {
 this.age = age;
 }
 public String getAddress() {
 return address;
 }
 public void setAddress(String address) {
 this.address = address;
 }
 @Override
 public String toString() {
 return "Person [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
 }
}

3、发送以键值对形式的参数的post请求

package com.avatarmind.httpclient;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class HttpClient3 {
 
 public static void main(String[] args) throws Exception {
 CloseableHttpClient client = HttpClients.createDefault();
 String url = "http://yuntuapi.amap.com/datamanage/table/create";
 HttpPost httpPost = new HttpPost(url);
 // 参数形式为key=value&key=value
 List<NameValuePair> formparams = new ArrayList<NameValuePair>();
 formparams.add(new BasicNameValuePair("key", "060212638b94290e3dd0648c15753b64"));
 formparams.add(new BasicNameValuePair("name", "火狐"));
  
 // 加utf-8进行编码
 UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
 httpPost.setEntity(uefEntity);
 CloseableHttpResponse response = client.execute(httpPost);
 HttpEntity entity = response.getEntity();
 String result = EntityUtils.toString(entity, "UTF-8");
 System.out.println(result);
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Spring Cloud  Eureka服务治理的实现

    Spring Cloud Eureka服务治理的实现

    服务治理是微服务框架中最为核心和基础的模块,它主要是用来实现各个微服务实例的自动化注册与发现。这篇文章主要介绍了Spring Cloud Eureka服务治理的实现,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • JAVA hashCode使用方法详解

    JAVA hashCode使用方法详解

    本文详细解释了JAVA hashCode的使用方法,提供了测试hashCode和equals方法的使用实例
    2013-11-11
  • Java底层基于二叉搜索树实现集合和映射/集合Set功能详解

    Java底层基于二叉搜索树实现集合和映射/集合Set功能详解

    这篇文章主要介绍了Java底层基于二叉搜索树实现集合和映射/集合Set功能,结合实例形式分析了Java使用二叉搜索树实现集合和映射相关操作技巧,需要的朋友可以参考下
    2020-03-03
  • SpringCloud Feign传递HttpServletRequest对象流程

    SpringCloud Feign传递HttpServletRequest对象流程

    HttpServletRequest接口的对象代表客户端的请求,当客户端通过HTTP协议访问Tomcat服务器时,HTTP请求中的所有信息都封装在HttpServletRequest接口的对象中,这篇文章介绍了Feign传递HttpServletRequest对象的流程,感兴趣的同学可以参考下文
    2023-05-05
  • java虚拟机学习高级篇

    java虚拟机学习高级篇

    在本篇文章里小编给大家整理了关于java虚拟机学习高级篇的相关内容,有兴趣的朋友们跟着学习参考下。
    2019-06-06
  • Java接口幂等性设计原理解析

    Java接口幂等性设计原理解析

    这篇文章主要介绍了Java接口幂等性设计原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • jdk在centos中安装配置图文教程

    jdk在centos中安装配置图文教程

    这篇文章主要介绍了jdk在centos中安装配置图文教程,文中给出大家jdk下载地址,需要的朋友可以参考下
    2018-04-04
  • SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法

    SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库

    这篇文章主要介绍了SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 详解使用Jenkins部署Spring Boot项目

    详解使用Jenkins部署Spring Boot项目

    这篇文章主要介绍了详解使用Jenkins部署Spring Boot,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • java读写二进制文件的解决方法

    java读写二进制文件的解决方法

    本篇文章是对java读写二进制文件的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论