使用Struts2写的接口实现接收json格式的数据

客户端往服务端发送json格式数据,服务端处理json数据(简单json格式)

先说下需求:写一个接口,接收数据格式是json。

如果使用springMVC实现,非常简单,方法中使用@RequestBody接收参数 即可,如下:

 

[java]  view plain  copy
 
  1. <span style="white-space:pre">  </span>@ResponseBody  
  2.     @RequestMapping(value = "/create" , method = RequestMethod.POST)  
  3.     public XXX xxx(@RequestBody String json) {  
  4.         xxxxxx  
  5.     }  

如果对springMVC实现比较感兴趣,自己去百度,网上一堆资料。

 

下面我介绍下使用struts2实现,这方面我找了很多资料,网上资料很杂,自己总结后并且实现了功能。

其实一开始自己的没弄明白原理,找的资料都是如何从页面传递json到后台,这并不是我想要的。

我们开发接口是供别人调用的,别人在他们项目中直接访问你的接口url并通过post请求传递json数据。我们接口中是要接收json数据并进行解析,可是json是一个整体,如何接收,没有key..使用谷歌的模拟post请求工具插件Advanced RestClient调试后发现,json数据其实是在post请求体中,类似于form表单,只不过json的httppost.setHeader("Content-Type","application/json"),而form表单为httppost.setHeader("Content-Type","application/x-www-form-urlencoded");所以可以获取post请求体中的内容再进行解析。代码如下:

 

[java]  view plain  copy
 
  1. <span style="white-space:pre">  </span>//获取请求体中的数据  
  2.     public String getStrResponse(){  
  3.         ActionContext ctx = ActionContext.getContext();  
  4.         HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);     
  5.         InputStream inputStream;  
  6.         String strResponse = "";  
  7.         try {  
  8.         inputStream = request.getInputStream();  
  9.         String strMessage = "";  
  10.         BufferedReader reader;  
  11.         reader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));  
  12.         while ((strMessage = reader.readLine()) != null) {  
  13.         strResponse += strMessage;  
  14.         }  
  15.         reader.close();  
  16.         inputStream.close();  
  17.         } catch (IOException e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.         return strResponse;  
  21.     }  
[java]  view plain  copy
 
  1. <span style="white-space:pre">  </span>/*XXXX任务接口*/  
  2.     public String XXXTask(){  
  3.          //获取请求体中内容,转换为json  
  4.         JSONObject jsonRequest = JSONObject.fromObject(this.getStrResponse());  
  5.         //获取json中参数  
  6.         String accountId1=jsonRequest.getString("account_id");  
  7.         Long accountId=Long.parseLong(accountId1);  
  8.         String verifyContent=jsonRequest.getString("verify_content");  
  9.         String verifyType=jsonRequest.getString("verify_type");  
  10.         log.info("获得请求参数[account_id:"+accountId+",verify_content:"+verifyContent+",verify_type:"+verifyType+"]");  
  11.         if("N".equalsIgnoreCase(verifyType)){  
  12.             verifyType = "1";  
  13.         }else if("A".equalsIgnoreCase(verifyType)){  
  14.             verifyType = "2";  
  15.         }else if("P".equalsIgnoreCase(verifyType)){  
  16.             verifyType = "3";  
  17.         }  
  18.         //下面为具体业务处理  
  19.         xxxxxxxxx  
  20.           
  21.         try {  
  22.             xxxxxxxxxxxx  
  23.             resMap.put(Fields.ERROR_NO_KEY, 0);  
  24.             resMap.put(Fields.ERROR_INFO_KEY, "提交xxxx审核成功");  
  25.             log.info("提交xxxx审核成功");  
  26.         } catch (Exception e) {  
  27.             e.printStackTrace();  
  28.             resMap.put(Fields.ERROR_NO_KEY, -1);  
  29.             resMap.put(Fields.ERROR_INFO_KEY, "提交xxxx审核失败");  
  30.             log.error("提交xxxx审核失败");  
  31.         }  
  32.         return SUCCESS;  
  33.     }  

 

测试 发送参数如下:

{
"account_id": "6",
"verify_content": "资料修改6",
"verify_type": "N"
}

 

 

成功接收参数。此时接口完成。

 

http://blog.csdn.net/devin_ran/article/details/53639205

 

猜你喜欢

转载自zgphacker2010.iteye.com/blog/2401327
今日推荐