最近在开发一个项目,需要将对象转成json,然后调用外部接口上报数据。
外部接口返回json数据
{
"id": "xxx", // 上报成功时id才有数据
"code": "xxx", // 0代表上报成功,其他代表错误
"message": "xxx" // 无论如何都有数据
}
java实现
private void doUpload() {
HttpClient client = HttpClients.createDefault();
String url = SERVER_URL;// 外部接口地址
HttpPost post = new HttpPost(url);
JSONObject response = null;
try {
//buildSamDto(sampleDTO)方法为给实体对象sampleDTO属性赋值,
//接着用JSONObject.fromObject()方法将该sampleDTO对象转成json
StringEntity s = new StringEntity(JSONObject.fromObject(buildSamDto(sampleDTO)).toString());
s.setContentEncoding("UTF-8");
s.setContentType("application/json");
post.setEntity(s);
post.addHeader("content-type", "text/xml");
HttpResponse res = client.execute(post);// 上报数据
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
// String result = EntityUtils.toString(res.getEntity(), "utf-8"); 这个方法只能用一次,
//不然会Attempted read from closed stream,故而改用下面的方法。
//具体可查看我这篇博客'https://blog.csdn.net/qq_39380155/article/details/109576795'
byte[] byteArray = EntityUtils.toByteArray(res.getEntity());
response = JSONObject.fromObject(new String(byteArray, "utf-8"));// 防止返回结果中文乱码
String message = (String) response.get("message");
code = (String) response.get("id");
// 0代表上报成功
if ("0".equals((String) response.get("code"))) {
// TODO
} else {
// TODO
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
如果需要传入文件参数,可看我这篇文章
如何用java实现post请求外部接口(字符串+文件参数)