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;
	}
}

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值