摘要
本篇文章我带大家使用Java代码来实现不同系统使用http post请求发送json数据和另一个系统怎么接收数据进行处理,其实想要简单的实现不难,我这边的业务需要是需要将系统A中的数据发送到系统B中,系统B接收传递过来的数据进行同步。注意我这边两个系统都是本公司系统,如果是发送数据给第三方或接受第三方发送数据也可以根据需求进行修改即可。注意该项目是SSH项目框架,不同框架需要注意系统域名地址拦截。有需要的伙伴可以参考和借鉴。
实现
Java代码:
1. 系统A中创建HttpUtil工具类发送json数据:
package com.weixin.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSONObject;
import com.hontek.comm.util.UPostMethod;
public class HttpUtil {
private static Logger logger = Logger.getLogger(HttpUtil.class);
private final static int CONNECT_TIMEOUT = 5000; // in milliseconds
private final static String DEFAULT_ENCODING = "UTF-8";
public static String postData(String urlStr, String data){
return postData(urlStr, data, null);
}
/**
*发送post请求
* @Author yang
* @param urlStr:请求URL
* @param data:请求数据
* @param contentType:编码类型
* @Date 2021/07/19 10:37
**/
public static String postData(String urlStr, String data, String contentType){
BufferedReader reader = null;
try {
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setConnectTimeout(CONNECT_TIMEOUT);
conn.setReadTimeout(CONNECT_TIMEOUT);
if(contentType != null)
conn.setRequestProperty("content-type", contentType);
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), DEFAULT_ENCODING);
if(data == null)
data = "";
writer.write(data);
writer.flush();
writer.close();
reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), DEFAULT_ENCODING));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\r\n");
}
return sb.toString();
} catch (IOException e) {
logger.error("Error connecting to " + urlStr + ": " + e.getMessage());
} finally {
try {
if (reader != null)
reader.close();
} catch (IOException e) {
}
}
return null;
}
}
2. 系统B中也需要创建HttpUtil工具类接受json数据:
package com.weixin.util;
import java.io.BufferedReader;
import java.io.IOException;
import com.alibaba.fastjson.JSON;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import javax.servlet.http.HttpServletRequest;
public class HttpUtil {
/**
* 返回request对象
* @return
* @Description:
*/
protected HttpServletRequest getRequest () {
return ServletActionContext.getRequest ();
}
/**
* 接收json数据
* @Author yang
* @Date 2021/07/19 16:39
**/
public JSONObject receiveData(){
BufferedReader br = null;
net.sf.json.JSONObject oj = null;
try {
br = getRequest().getReader();
String str = "";
String listString = "";
while ((str = br.readLine()) != null) {
listString += str;
}
oj = JSONObject.fromObject(JSON.parseObject(listString));
System.out.println(oj);
System.out.println(oj.isEmpty());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
}
}
return oj;
}
}
3. 调用实例:
/**
* 同步合格证数据
* @Author yang
* @Date 2021/07/09 10:17
**/
public void addSyncCertificateData(){
JSONObject res = new JSONObject(); //使用JSONObject.put返回code
JSONObject oj = receiveData();
logger.info(oj.toString());
if(!oj.isEmpty()){
String msg = certificateServiceInter.addSyncCertificate(oj,getRequest());
res.put("code", Integer.valueOf(msg));
}
printJsonString(res.toString());
}
注意:系统A发送数据后需要接受数据处理后的状态码是否成功,示例如下:
4. 域名拦截配置示例:
欢迎小伙伴留言评论,需要完整代码的加我QQ:450938667