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

java前台传参json,后台用map或者实体对象接收的更多相关文章

  1. angularjs向后台传参,后台收不到数据

    angularjs中封装了一个$http服务,用来请求远程资源 参见:HTTP API 其中封装过的$http.post和$http.get使用起来比较方便 后台是php,用$_POST['name' ...

  2. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!

    看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...

  3. 浅谈对java中传参问题的理解

    之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.在网上找了找,按我之前的理解,java中传 ...

  4. springboot之json传参(后台控制层如何接收和解析参数)

    一般web端都是用form标签的形式进行表单提交到后台,后台控制层再用相应的实体对象去接收前端传来的json参数. 但是有时候前端界面很复杂,要传入后端的参数是各种标签里面的value值,这些值又是来 ...

  5. springMVC通过ajax传参到后台

    JSON对象和JSON字符串 在SpringMVC环境中,@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,用 JSON.s ...

  6. 再谈Java方法传参那些事

    把一个变量带进一个方法,该方法执行结束后,它的值有时会改变,有时不会改变.一开始会觉得--“好神奇呀”.当我们了解java内存分析的知识后,一切都是那么简单明了了--“哦,这么回事呀”.但是今天的上机 ...

  7. java上传excel到后台解析入库

    背景:最近需要做一个excel模板导入的功能,以便用户可以自己增删改查数据,当然,只有特别的用户才能有此权限,捋了捋思路,还是从前端写起 实现: 页面最后的效果如下,可以自己修改,删除,导入导出数据, ...

  8. RESTful Get方式传参json格式后端400 解决方案

    前端采用vue+axios 后端采用spring boot restful 问题: 前端get 请求需要传递array 字段值 后端由于tomcat 版本问题,不支持url接受特殊字符包括 [] {} ...

  9. java 线程传参 方式

    第一类:主动向线程传参   public class ThreadTest extends Thread { public ThreadTest() { } /** * 第一种通过构造方法来传递参数 ...

随机推荐

  1. mongdb增加字段和删除字段

    增加字段 db.xxx.update({},{"$set":{"column1":1,"column2":0}},false,true); ...

  2. 用AutoHotkey一键打开、激活、或隐藏Chrome(或其他软件)

    热键的效果: 1.Chrome没打开时,打开Chrome 2.Chrome已打开,未激活时,则激活Chrome 3.Chrome已激活,则隐藏Chrome 本来这种功能对AutoHotkey来说非常简 ...

  3. gcc编译流程

    gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 以hello.c为例子,在这四个步骤中 ...

  4. MySQL数据库实验三:连接查询

    实验三    连接查询 实验名称:连接查询(2课时) 一.实验目的 理解JOIN语句的操作和基本使用方法,掌握内连接.外连接.自身连接的概念和使用. 二.实验环境 是MS SQL SERVER 200 ...

  5. [论文理解]关于ResNet的进一步理解

    [论文理解]关于ResNet的理解 这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考. 要解决什么问题 论文的一大贡 ...

  6. Visual Studio 2013 ReportViewer Control

    最近需要给学生讲报表,.NET的自然就是选择RDLC了. 因为学生比赛是用Visual Studio 2013,所以我在自己的笔记本上安装了Visual Studio 2013(平常是用2010),安 ...

  7. 缓冲区溢出实战教程系列(二):dev c++编译汇编代码

    小伙伴们对我上一篇文章的反应完全出乎了我的意料,感谢大家对我的支持和认可.接下来我会精心的把这一系列课程设计好,尽量详细的展示给大家.上篇文章我列举了一个缓冲区溢出的小例子,并提到了dev c++.o ...

  8. 【动态规划 floyd】SPOJ ACPC13

    为什么rzz会把这题放在NOI模拟赛的T2? 题目大意 有一张$n$个点$m$条边的有向图,每条边有权值$w_i$. 定义一个任务$(a_i,b_i,c_i)$是如下一条路径: 最多经过$c_i$条边 ...

  9. 一个优秀的SSH远程终端工具

    SSH远程终端工具是一款在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的.向我们操控集群的时候,如果每台机器都安装一个显示器和键盘也是一个不小的花费,而远程终端 ...

  10. ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)

    pragma solidity ^0.4.4; contract funder{ //0xca35b7d915458ef540ade6068dfe2f44e8fa733c //0x14723a09ac ...