如何java实现调用外部接口(POST请求)

最近在开发一个项目,需要将对象转成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请求外部接口(字符串+文件参数)

你可能感兴趣的:(业务实战,作品源码分享,java,json,接口,post)