(一)前台傳js對象,里面包含數組,后台用map接收
(1)第一種情況:數組里不包含js對象
var param ={}; param.id=id; param.name=name; var score = new Array(); score.push('1'); score.push('2'); param.score = score;
后台先用該方法將json字符串轉成map
Map<String,Object> param=RequestParamToMap.convert(req);
方法為
public class RequestParamToMap { public static final Map<String,Object> convert(HttpServletRequest request){ Map<String,Object> param=new HashMap<String, Object>(); Enumeration<String> e=request.getParameterNames(); String name=""; String str[]=null; while(e.hasMoreElements()){ name=e.nextElement(); str=request.getParameterValues(name); name=name.replace("[", "").replace("]", ""); if(str.length==1) param.put(name, str[0].replaceAll("\"", "\\\"").replaceAll("\'", "\\\'").replaceAll("<", "<").replaceAll(">", ">")); else{ for(int i=0;i<str.length;i++) str[i]=str[i].replaceAll("\"", "\\\"").replaceAll("\'", "\\\'").replaceAll("<", "<").replaceAll(">", ">"); param.put(name, str); } } return param; } }
但是該方法對上面的param.score並不能轉好,需要進行下一步:
List<Object> list=new ArrayList<>(); if(param.get("score").getClass().getName().equals("java.lang.String")){ list.add(param.get("score")); }else{ list.addAll(Arrays.asList((Object[])param.get("score"))); } param.put("score", list); //現在param.score就是一個集合了,可以傳到sql語句中
(2)第二種情況:數組里包含js對象
var param ={}; param.id=id; param.name=name; var score = new Array(); var p={}; p.id = id; p.name=name; score.push(JSON.stringify(p)); //把js對象序列化成字符串 var m={}; m.id = id; m.name=name; score.push(JSON.stringify(m)); param.score = score;
后台依然用該方法將json字符串轉成map
Map<String,Object> param=RequestParamToMap.convert(req);
但是該方法對上面的param.score並不能轉好,需要進行下一步:
List<Map<String,Object>> list=null; if(param.containsKey("score")){ list=new ArrayList<Map<String,Object>>(); if(param.get("score").getClass().getName().equals("java.lang.String")){ list.add(ObjectMapperTool.mapper.readValue(param.get("score").toString(),Map.class)); }else{ String[] strArr=(String[])param.get("score"); for(String str:strArr) list.add(ObjectMapperTool.mapper.readValue(str,Map.class)); } } param.put("score",list);//現在param.score就是一個集合了,可以傳到sql語句中
(二)前台傳js對象,里面包含數組,后台用實體對象接收
(1)第一種情況:數組里包含js對象
var param ={}; param.id=id; param.name=name; var score = new Array(); var p={}; p.id = id; p.name=name; score.push(p); var m={}; m.id = id; m.name=name; score.push(m); param.score = JSON.stringify(score); //把數組序列化成字符串
后台用Student實體類接收,因傳的score是個字符串,用String接收
public class Student implements Serializable{ private static final long serialVersionUID = 1L; private int id; private String name; private String score; //get set 省略 }
但是score里包含id和name兩個字段,這就需要用到一個實體類集合
public class Score implements Serializable{ private static final long serialVersionUID = 1L; private int id; private String name; //get set 省略 }
后台這樣處理:
List<Score> score= new ArrayList<>(); if (!ChkUtil.isEmpty(Student.getScore())) { try{ Score [] s = ObjectMapperTool.mapper.readValue(Student.getScore(),Score[].class); score= Arrays.asList(s); }catch(Exception e){ jsonMap.put(FieldConstant.STATUS, NumberConstant.STATUS_ERROR); jsonMap.put(FieldConstant.MSG, MsgConstant.DATA_TO_JSON_ERROR); logger.info(MsgConstant.DATA_TO_JSON_ERROR); JSONResponseUtil.buildCustomJSONDataResponse(resp, jsonMap); return; } }
(1)第二種情況:數組里不包含js對象
var param ={}; param.id=id; param.name=name; var score = new Array(); score.push(11); score.push(22); param.score = JSON.stringify(score); //把數組序列化成字符串
后台用一個實體對象接收,不同的是后台不需要寫一個實體類集合,當然也可以寫
List<String> score= new ArrayList<>(); if (!ChkUtil.isEmpty(Student.getScore())) { try{ String[] s = ObjectMapperTool.mapper.readValue(Student.getScore(),String[].class); score= Arrays.asList(s); }catch(Exception e){ jsonMap.put(FieldConstant.STATUS, NumberConstant.STATUS_ERROR); jsonMap.put(FieldConstant.MSG, MsgConstant.DATA_TO_JSON_ERROR); logger.info(MsgConstant.DATA_TO_JSON_ERROR); JSONResponseUtil.buildCustomJSONDataResponse(resp, jsonMap); return; } }
