首先,我们应该了解APP发送请求的数据格式:
post请求一般以json格式,或者流的方式(比如图片 视频 文件 都是转为流再传输),还有一种是url中直接携带参数(例如get请求)
controller层接收处理请求时,我这边处理请求是通过流的方式读取请求的数据,然后将获取的数据转换成json字符串,当做参数传递到实现层的方法中执行相关的业务逻辑处理。
代码如下 /* *
* @function 获取故障任务详情信息列表. * @author Liangjw * @date 2020年5月24日16:40:57 * @param request * @param response * @throws Exception */ public void getFaultTaskInfosByTaskIds(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=UTF-8"); HashMap<String, Object> map = new HashMap<String,Object>(); List<DataRecord> faultTaskInfoList = new ArrayList<DataRecord>(); BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8")); String line = null; StringBuilder sb = new StringBuilder(); while((line = br.readLine())!=null){ sb.append(line); } String reqData = sb.toString(); if(reqData != null && !"".equals(reqData)) {
/*JSONObject jsonObject = JSON.parseObject(reqData); */ //APP发送的任务id直接封装在body{}中,参数在第一层{},格式如:{"task_id":1001}
/*JSONObject jsonObject = JSON.parseObject(JSON.parseObject(reqData).getString("data")); */ //app发送的任务id封装到一个data对象中,参数在第二{} ,格式如:{"data":{"task_id":1001}}
List<JSONObject> taskIdlist = JSON.parseArray(JSON.parseObject(reqData).getString("data"), JSONObject.class); //app发送的任务id集封装到一个data数组对象中 ,参数在第二层{},格式如:{"data":[{"task_id:1001"},{"task_id":1002},...{"task_id":1009}]}
if(!taskIdlist.isEmpty()) { faultTaskInfoList = service.getFaultTaskInfosByTaskIds(taskIdlist); } } if(faultTaskInfoList != null && faultTaskInfoList.size() > 0){ map.put("data", faultTaskInfoList); } PrintWriter writer = response.getWriter(); writer.write(JSONObject.toJSONString(map,SerializerFeature.DisableCircularReferenceDetect)); }