1. 程式人生 > >http傳輸json進行服務端介面與客戶端對接,以及restful實現

http傳輸json進行服務端介面與客戶端對接,以及restful實現

話不多說,直接貼程式碼,照寫就好了

服務端介面編寫,我用的是springmvc,服務端介面其實和平時web開發一樣,就是返回出json就好了,還有就是接受資料也是json,方法如下:

@Controller
@RequestMapping("/user")
public class UserController {
	
	@Autowired
	private UserService userservice;
	@RequestMapping("/getUserByName")
	public @ResponseBody User getUserByName(HttpServletRequest request) throws IOException{
		StringBuffer str = new StringBuffer(); 
		try {
			   BufferedInputStream in = new BufferedInputStream(request.getInputStream());
			      int i;
			      char c;
			      while ((i=in.read())!=-1) {
			      c=(char)i;
			      str.append(c);
			      }
			     }catch (Exception ex) {
			   ex.printStackTrace();
			   }
        JSONObject obj= JSONObject.fromObject(str.toString());
        System.out.println(obj.get("name"));
		User user= userservice.getUserByName(obj.get("name").toString());
		return user;
	}
	
}
實現的是一個通過服務端接收客戶端json{“name”:"cwh"}名字name進行查詢操作,然後給客戶端返回json;

客戶端實現如下:

import java.io.IOException;

import net.sf.json.JSONObject;
import net.spring.model.User;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.junit.Test;

public class Client {
	@Test
	public void HttpPostData() {  
	      try { 
	          HttpClient httpclient = new DefaultHttpClient();  
	          String uri = "http://localhost:8080/springMVC/user/getUserByName"; 
	          HttpPost httppost = new HttpPost(uri);   
	          //新增http頭資訊 
	          httppost.addHeader("Authorization", "your token"); //認證token 
	          httppost.addHeader("Content-Type", "application/json"); 
	          httppost.addHeader("User-Agent", "imgfornote");  
	          JSONObject obj = new JSONObject();
	          obj.put("name", "cwh"); 
	          httppost.setEntity(new StringEntity(obj.toString()));     
	          HttpResponse response;  
	          response = httpclient.execute(httppost);  
	          //檢驗狀態碼,如果成功接收資料  
	          int code = response.getStatusLine().getStatusCode();  
	          System.out.println(code+"code");
	          if (code == 200) {  
	              String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""}         
	              obj= JSONObject.fromObject(rev);
	          
	              User user = (User)JSONObject.toBean(obj,User.class);
	              System.out.println("返回資料==="+user.toString());
	          } 
	          } catch (ClientProtocolException e) { 
	        	  e.printStackTrace();
	          } catch (IOException e) {  
	        	  e.printStackTrace();
	          } catch (Exception e) { 
	        	  e.printStackTrace();
	          } 
	     }
}
ok,把服務端部署到tomcat

執行客戶端:返回資料成功



當然也可以用RESTFUL風格來實現

服務端可以這麼編寫:

@RequestMapping("/getUserByName/{name}")
	public @ResponseBody User getUserByName(@PathVariable("name")String name) throws IOException{
		User user= userservice.getUserByName(name);
		return user;
	}
那麼客戶端請求就這麼寫了:
public void HttpPostData() {  
	      try { 
	          HttpClient httpclient = new DefaultHttpClient();  
	          String uri = "http://localhost:8080/springMVC/user/getUserByName/cwh"; 
	          HttpPost httppost = new HttpPost(uri);   
	          JSONObject obj = new JSONObject();
	          
	          HttpResponse response;  
	          response = httpclient.execute(httppost);  
	          //檢驗狀態碼,如果成功接收資料  
	          int code = response.getStatusLine().getStatusCode();  
	          System.out.println(code+"code");
	          if (code == 200) {  
	              String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""}         
	              obj= JSONObject.fromObject(rev);
	              User user = (User)JSONObject.toBean(obj,User.class);
	              System.out.println("返回資料==="+user.toString());
	          } 
	          } catch (ClientProtocolException e) { 
	        	  e.printStackTrace();
	          } catch (IOException e) {  
	        	  e.printStackTrace();
	          } catch (Exception e) { 
	        	  e.printStackTrace();
	          } 
	     }

這樣也是可以的