有时候我们在发送HTTP请求的时候会使用到POST方式,如果是传送普通的表单数据那将很方便,直接将参数到一个Key-value形式的Map中即可。但是如果我们需要传送的参数是Json格式的,会稍微有点麻烦,我们可以使用HttpClient类库提供的功能来实现这个需求。假设我们需要发送的数据是: 我们可以通过JSONObject够着Json: 1 | JSONObject jsonObject = new JSONObject(); |
4 | jsonObject.put( "Author" , "iteblog" ); |
如果需要使用Post方式来发送这个数据,我们可以如下实现: 01 | private HttpMethodBase createMethod(String url, int timeout) { |
02 | PostMethod method = null ; |
04 | method = new PostMethod(url); |
05 | JSONObject jsonObject = new JSONObject(); |
08 | jsonObject.put( "Author" , "iteblog" ); |
10 | String transJson = jsonObject.toString(); |
11 | RequestEntity se = new StringRequestEntity(transJson, "application/json" , "UTF-8" ); |
12 | method.setRequestEntity(se); |
14 | method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); |
16 | method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, timeout); |
17 | } catch (IllegalArgumentException e) { |
18 | logger.error( "非法的URL:{}" , url); |
19 | } catch (UnsupportedEncodingException e) { |
我们通过StringRequestEntity来构造请求实体,在这里,StringRequestEntity将接收三个参数,如下: 1 | public StringRequestEntity(String content, String contentType, String charset) |
2 | throws UnsupportedEncodingException |
其中参数content 就是我们需要传输的数据;contentType 是传送数据的格式,因为我们的数据格式是json的,所以contentType 必须填写application/json (更多的contentType可以参见《HTTP Content-Type常用一览表》);charset 是字符集编码。 然后我们再通过HttpClient对象的executeMethod方法来执行: 1 | int statusCode = httpClient.executeMethod(getMethod); |
3 | if (statusCode != HttpStatus.SC_OK) { |
4 | logger.error( "Method failed: " + getMethod.getStatusLine() + "\tstatusCode: " + statusCode); |
总结:
1.简单的解析json字符串首先将json字符串转换为json对象,然后再解析json对象,过程如下。 JSONObject jsonObject = JSONObject.fromObject(jsonStr);
- <pre></pre><span style="white-space:pre"></span>
- <pre></pre>
根据json中的键得到它的值 String name = jsonObject.getString("name"); int num = jsonObject.getInt("num"); String sex = jsonObject.getString("sex"); int age = jsonObject.getInt("age");
例子: - private static void TestJsonAttribute() {
-
-
-
- JSONObject jsonObj = new JSONObject();
- jsonObj.put("Int_att",25);
- jsonObj.put("String_att","str");
- jsonObj.put("Double_att",12.25);
- jsonObj.put("Boolean_att",true);
-
- JSONObject jsonObjSon = new JSONObject();
- jsonObjSon.put("id", 1);
- jsonObjSon.put("name", "tom");
- jsonObj.put("JSONObject_att",jsonObjSon);
-
- JSONArray jsonArray = new JSONArray();
- jsonArray.add("array0");
- jsonArray.add("array1");
- jsonArray.add("array2");
- jsonArray.add("array3");
- jsonObj.put("JSONArray_att", jsonArray);
- System.out.println(jsonObj.toString());
- System.out.println("Int_att:"+jsonObj.getInt("Int_att"));
- System.out.println("String_att:"+jsonObj.getString("String_att"));
- System.out.println("Double_att:"+jsonObj.getDouble("Double_att"));
- System.out.println("Boolean_att:"+jsonObj.getBoolean("Boolean_att"));
- System.out.println("JSONObject_att:"+jsonObj.getJSONObject("JSONObject_att"));
- System.out.println("JSONArray_att:"+jsonObj.getJSONArray("JSONArray_att"));
- }
2.将json字符串转换为java对象同样先将json字符串转换为json对象,再将json对象转换为java对象,如下所示。 JSONObject obj = new JSONObject().fromObject(jsonStr);//将json字符串转换为json对象
将json对象转换为java对象 Person jb = (Person)JSONObject.toBean(obj,Person.class);//将建json对象转换为Person对象
3.将java对象转换为json字符串先将java对象转换为json对象,在将json对象转换为json字符串 JSONObject json = JSONObject.fromObject(obj);//将java对象转换为json对象
String str = json.toString();//将json对象转换为字符串
|