一、适用场景
当我们向第三方系统提交数据的时候,需要调用第三方系统提供的接口。不同的系统提供的接口也不一样,有的是SOAP Webservice、RESTful Webservice 或其他的。当使用的是RESTful webservice的时候,就可以使用httpcomponents组件来完成调用。
如我们需要发起post请求,并将数据转成json格式,设置到post请求中并提交。
url:"http://www.xxxxx.com/message"
json数据格式 {"name":"zhangsan", "age":20, "gender": "mail"} // 一个用户的基本信息
二、实例代码
1 package com.demo.test; 2 3 import java.io.IOException; 4 5 import org.apache.http.HttpEntity; 6 import org.apache.http.client.ClientProtocolException; 7 import org.apache.http.client.methods.CloseableHttpResponse; 8 import org.apache.http.client.methods.HttpPost; 9 import org.apache.http.entity.ContentType; 10 import org.apache.http.entity.StringEntity; 11 import org.apache.http.impl.client.CloseableHttpClient; 12 import org.apache.http.impl.client.HttpClients; 13 import org.apache.http.util.EntityUtils; 14 15 public class Test { 16 17 public static String sendInfo(String sendurl, String data) { 18 CloseableHttpClient client = HttpClients.createDefault(); 19 HttpPost post = new HttpPost(sendurl); 20 StringEntity myEntity = new StringEntity(data, 21 ContentType.APPLICATION_JSON);// 构造请求数据 22 post.setEntity(myEntity);// 设置请求体 23 String responseContent = null; // 响应内容 24 CloseableHttpResponse response = null; 25 try { 26 response = client.execute(post); 27 if (response.getStatusLine().getStatusCode() == 200) { 28 HttpEntity entity = response.getEntity(); 29 responseContent = EntityUtils.toString(entity, "UTF-8"); 30 } 31 } catch (ClientProtocolException e) { 32 e.printStackTrace(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } finally { 36 try { 37 if (response != null) 38 response.close(); 39 40 } catch (IOException e) { 41 e.printStackTrace(); 42 } finally { 43 try { 44 if (client != null) 45 client.close(); 46 } catch (IOException e) { 47 e.printStackTrace(); 48 } 49 } 50 } 51 return responseContent; 52 } 53 54 public static void main(String[] args) { 55 String json = "{\"name\":\"zhangsan\", \"age\":20, \"gender\": \"mail\"} "; 56 String result = sendInfo("http://www.xxxxx.com/message", json); 57 System.out.println(result); 58 } 59 }
发送请求之后,后台会打印返回的信息。