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