java前台傳參json,后台用map或者實體對象接收


(一)前台傳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;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM