httpClientを使用したインタフェーステスト


概要
現在、多くのWebアプリケーション開発はバックグラウンドに分かれており、バックグラウンド開発はインタフェースを提供してJsonオブジェクトを呼び出し、フロントはJSフレームワークを使用してバックグラウンドから戻ってきたJsonをロードする.本稿では、このようなバックグラウンドインタフェースをHttpClientでテストする方法を例に簡単に述べる.
 
Jsonオブジェクトを扱う基本API
JSONパッケージで最もよく使われる2つのクラスはJSOnObjectとJSOnArrayです.具体的にはJSON for java入門まとめを参照してください.
以下は自分で真似した簡単な例です.
package com.james.json;

import org.json.JSONArray;
import org.json.JSONObject;

public class JsonTest {

	public static void main(String[] args) {
		
		// Test JSONObject.
		JSONObject jsonobj = new JSONObject("{'name':'jingshou','age':30}");  
        String name = jsonobj.getString("name");  
        int age = jsonobj.getInt("age");
        System.out.println(jsonobj.toString());
        System.out.println(name+":"+age); 
        System.out.println("**********");
        
        // Test JSONArray.
        JSONArray jsonarray = new JSONArray("[{'name':'jingshou','age':30},{'name':'xiaohong','age':29}]");  
        for(int i=0;i<jsonarray.length();i++){
        	JSONObject jo = jsonarray.getJSONObject(i);
        	System.out.println(jo);
            String name1 = jo.getString("name");
            int age1 = jo.getInt("age");
            System.out.println("name1= "+name1);
            System.out.println("age1= "+age1);
        }
	}
	

}

 実行結果は次のとおりです.
{"age":30,"name":"jingshou"}
jingshou:30
**********
{"age":30,"name":"jingshou"}
name1= jingshou
age1= 30
{"age":29,"name":"xiaohong"}
name1= xiaohong
age1= 29

 上記の例から見た基本的な事実は、
  • 文字列によってJSOONObject
  • を直接構築できます.
  • JSONObjectのkeyは明示的に伝わるときは単一引用符で包まれていますが、印刷されるときは依然として私たちが望んでいる二重引用符
  • です.
    httpclient処理APIを使用して返す
    次の例では、httpClientを使用してAPIから返されるJSON文字列を取得し、処理する方法を示します.
    package com.james.json;
    
    import java.io.IOException;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    
    public class SimpleServiceTest {
    
    	public static void main(String[] args) throws ClientProtocolException, IOException {
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    		HttpPost httppost = new HttpPost("http://jingshou.com/admin/searchUser.action?search_loginid=jingshou");
    		CloseableHttpResponse response = httpclient.execute(httppost);
    		try {
    			HttpEntity myEntity = response.getEntity();
    			System.out.println(myEntity.getContentType());
    			System.out.println(myEntity.getContentLength());
    			
    			String resString = EntityUtils.toString(myEntity);
                //               JSONObject		
    			JSONObject jsonobj = new JSONObject(resString);
    			System.out.println(jsonobj.toString());
    			//        "resultSize  "
    			int resutltSize = jsonobj.getInt("resultSize");
    			System.out.println("Search Results Size is: "+ resutltSize); 
    			//   "clients"  ,    JSONArray
    			JSONArray jsonarray = jsonobj.getJSONArray("clients");
    			System.out.println(jsonarray.toString());
    			
    	        
    		} finally {
    		    response.close();
    		}
    		
    		
    	}
    
    }

    実行結果は次のとおりです.
    Content-Type: text/plain; charset=UTF-8
    -1
    {"resultSize":1,"clients":[{"expirationDate":0,"reqStatus":0,"mostRecentActivity":1388376890000,"clientName":"Jingshou Li","company":"Pending","internal":true,"clientId":"jingshou","salesNames":"","disabled":false}]}
    Search Results Size is: 1
    [{"expirationDate":0,"reqStatus":0,"mostRecentActivity":1388376890000,"clientName":"Jingshou Li","company":"Pending","internal":true,"clientId":"jingshou","salesNames":"","disabled":false}]

     まとめ:
  • APIを介して返されるJSON文字列は、JSONオブジェクト
  • を直接構築する
  • JSONObject内部データを読み出すには、事前にオブジェクトの構造を知る必要があるため、上記の処理方法は汎用性がなく、特定の戻り
  • のみを処理することができる.
    補足学習:
  • http://cgs1999.iteye.com/blog/1608003
  • http://cgs1999.iteye.com/blog/1609756

  • オリジナル文章、転載は出典を明記してください、原文の住所:httpClientを使用したインタフェーステスト