http传输json进行服务端接口与客户端对接,以及restful实现

话不多说,直接贴代码,照写就好了

服务端接口编写,我用的是springmvc,服务端接口其实和平时web开发一样,就是返回出json就好了,还有就是接受数据也是json,方法如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Controller  
  2. @RequestMapping("/user")  
  3. public class UserController {  
  4.       
  5.     @Autowired  
  6.     private UserService userservice;  
  7.     @RequestMapping("/getUserByName")  
  8.     public @ResponseBody User getUserByName(HttpServletRequest request) throws IOException{  
  9.         StringBuffer str = new StringBuffer();   
  10.         try {  
  11.                BufferedInputStream in = new BufferedInputStream(request.getInputStream());  
  12.                   int i;  
  13.                   char c;  
  14.                   while ((i=in.read())!=-1) {  
  15.                   c=(char)i;  
  16.                   str.append(c);  
  17.                   }  
  18.                  }catch (Exception ex) {  
  19.                ex.printStackTrace();  
  20.                }  
  21.         JSONObject obj= JSONObject.fromObject(str.toString());  
  22.         System.out.println(obj.get("name"));  
  23.         User user= userservice.getUserByName(obj.get("name").toString());  
  24.         return user;  
  25.     }  
  26.       
  27. }  
实现的是一个通过服务端接收客户端json{“name”:"cwh"}名字name进行查询操作,然后给客户端返回json;

客户端实现如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.io.IOException;  
  2.   
  3. import net.sf.json.JSONObject;  
  4. import net.spring.model.User;  
  5.   
  6. import org.apache.http.HttpResponse;  
  7. import org.apache.http.client.ClientProtocolException;  
  8. import org.apache.http.client.HttpClient;  
  9. import org.apache.http.client.methods.HttpPost;  
  10. import org.apache.http.entity.StringEntity;  
  11. import org.apache.http.impl.client.DefaultHttpClient;  
  12. import org.apache.http.util.EntityUtils;  
  13. import org.junit.Test;  
  14.   
  15. public class Client {  
  16.     @Test  
  17.     public void HttpPostData() {    
  18.           try {   
  19.               HttpClient httpclient = new DefaultHttpClient();    
  20.               String uri = "http://localhost:8080/springMVC/user/getUserByName";   
  21.               HttpPost httppost = new HttpPost(uri);     
  22.               //添加http头信息   
  23.               httppost.addHeader("Authorization""your token"); //认证token   
  24.               httppost.addHeader("Content-Type""application/json");   
  25.               httppost.addHeader("User-Agent""imgfornote");    
  26.               JSONObject obj = new JSONObject();  
  27.               obj.put("name""cwh");   
  28.               httppost.setEntity(new StringEntity(obj.toString()));       
  29.               HttpResponse response;    
  30.               response = httpclient.execute(httppost);    
  31.               //检验状态码,如果成功接收数据    
  32.               int code = response.getStatusLine().getStatusCode();    
  33.               System.out.println(code+"code");  
  34.               if (code == 200) {    
  35.                   String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""}           
  36.                   obj= JSONObject.fromObject(rev);  
  37.                 
  38.                   User user = (User)JSONObject.toBean(obj,User.class);  
  39.                   System.out.println("返回数据==="+user.toString());  
  40.               }   
  41.               } catch (ClientProtocolException e) {   
  42.                   e.printStackTrace();  
  43.               } catch (IOException e) {    
  44.                   e.printStackTrace();  
  45.               } catch (Exception e) {   
  46.                   e.printStackTrace();  
  47.               }   
  48.          }  
  49. }  
ok,把服务端部署到tomcat

运行客户端:返回数据成功



当然也可以用RESTFUL风格来实现

服务端可以这么编写:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @RequestMapping("/getUserByName/{name}")  
  2.     public @ResponseBody User getUserByName(@PathVariable("name")String name) throws IOException{  
  3.         User user= userservice.getUserByName(name);  
  4.         return user;  
  5.     }  
那么客户端请求就这么写了:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void HttpPostData() {    
  2.           try {   
  3.               HttpClient httpclient = new DefaultHttpClient();    
  4.               String uri = "http://localhost:8080/springMVC/user/getUserByName/cwh";   
  5.               HttpPost httppost = new HttpPost(uri);     
  6.               JSONObject obj = new JSONObject();  
  7.                 
  8.               HttpResponse response;    
  9.               response = httpclient.execute(httppost);    
  10.               //检验状态码,如果成功接收数据    
  11.               int code = response.getStatusLine().getStatusCode();    
  12.               System.out.println(code+"code");  
  13.               if (code == 200) {    
  14.                   String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""}           
  15.                   obj= JSONObject.fromObject(rev);  
  16.                   User user = (User)JSONObject.toBean(obj,User.class);  
  17.                   System.out.println("返回数据==="+user.toString());  
  18.               }   
  19.               } catch (ClientProtocolException e) {   
  20.                   e.printStackTrace();  
  21.               } catch (IOException e) {    
  22.                   e.printStackTrace();  
  23.               } catch (Exception e) {   
  24.                   e.printStackTrace();  
  25.               }   
  26.          }  

这样也是可以的
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值