我有一个java程序,通过apache httpclient将数据传递给php webservice。目前传递的只是用户身份验证详细信息和字符串变量。这些在PHP方面得到了很好的接收和处理。我还想以一种可以从PHP读取对象属性的方式传递对象的ArrayList。有没有办法直接以我传递参数的方式执行此操作,还是需要使用JSON对象或其他东西?包含的对象有4个属性,而不仅仅是名称值对。
我的Java代码如下:
public void upload(ArrayList<MyObject> myList) throws Exception{
//HTTP POST Service
try{
HttpClient httpclient = HttpClientBuilder.create().build();
URI uri = new URIBuilder()
.setScheme("http")
.setHost("www.mysite.com")
.setPath("/webservice.php")
.build();
HttpPost httppost = new HttpPost(uri);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("var1", var1));
String encoding = new String(
org.apache.commons.codec.binary.Base64.encodeBase64
(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(userID + ":" + password))
);
httppost.setHeader("Authorization", "Basic " + encoding);
httppost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = httpclient.execute(httppost);
System.out.println(response);
HttpEntity httpEntity = response.getEntity();
String str = "";
if (httpEntity != null) {
str = EntityUtils.toString(httpEntity);
System.out.println(str);
}
}catch (Exception e) {
e.printStackTrace();
}
}
编辑:
我的用例基本上是我想更新服务器上的MySQL数据库表,我的java对象的每个属性都是一个字段的值(即一个对象=一个表行)。所以我希望能够传递我的ArrayList,这样我就可以一次性将多行添加到我的数据库表中。
EDIT2。好的,我现在有以下方法来构造我的JSONArray,其中传递的变量以前是我的对象的属性。 JSON对象现在是以前的对象,而jsonArray以前就是我的ArrayList。它是否正确?如何从我的httpclient发布它?
public void constructJSON(long var1, int var2, int var3, int var4){
JSONObject obj;
JSONArray jsonArray = new JSONArray();
try {
obj = new JSONObject();
obj.put("var1:", var1);
obj.put("var2:", var2);
obj.put("var3:", var3);
obj.put("var4:", var4);
jsonArray.put(obj);
} catch (JSONException e) {
e.printStackTrace();
}
}