Json传对象数组到后台并转化成Java对象数组
来源:互联网 发布:sql数据迁移解决方案 编辑:程序博客网 时间:2024/06/01 20:54
Json传递数据到后来很方便,但是遇到复杂的数据传递,不注意细节会很容易报错。下面就来分享一下我的代码片段吧:
1、我们在做批量处理的时候,都希望传递一个对象数组到后来,这样存入数据库也就很方便了。首先来看一下我前端js代码片段:
function addUser(){
var $users = $("input:checked[name='selectUser']");
var engineers=new Array();
$.each($users,function(i, user) {
var fullName=$(user).attr("data-name");//fullName
var userId=$(user).val();//userId
var quantities=$('#'+userId).val();
var param={"deptId":deptId,"userId":userId,"fullName":fullName,"quantities":quantities,"engId":engId,"engNum":engNum};
console.log(param)
engineers.push(param);
});
以上标红的部分是我定义的一个队列以及Json格式的对象并将对象存入队列。然后就是用ajax将数据传到后台,下面是我初次的代码片段:
$.ajax({
url:window.ctx+'/engineer/to-engineerSelect',
type:"post",
traditional:true,//阻止深度序列化
data:{"engineers":JSON.stringify(engineers)},
dataType:"json",
contentType:"application/json; charset=utf-8" ,
success:function(feedback){
console.log(feedback.message)
});
这里值得注意的是红色片段,JSON.stringify(Object)是将对象转化成Json字符串,一定要设置contentType字段为Json,否则传递数据有可能出问题,虽然默认的传递方式会自动匹配,但是自己设置了就会防止没必要的错误。
后台接收数据代码片段:
@RequestMapping(value = "to-engineerSelect")
@ResponseBody
public Feedback toEngineerSelect(HttpServletRequest request, HttpServletResponse response,
@RequestBody List<AddEngineer> engineers) throws IOException {
System.out.println(engineers + "======" + engineers.getClass().getName());
String engId =engineers .get(0).getEngId();
我这里采用的是Spring-MVC框架,然后接收我直接转成对象数组了。然后我的打印有数据,返回的也确实是List对象数组。但是我的第二行用这个数组的对象去取它的属性值的时候就报错了,对象转换错误,直接异常。异常我记得是Json传递过来的是LinkMap对象,里面的对象没法转换成AddEngineer实体类。
2、然后我就想既然前端传递过来的是String类型的数据,那我就用String类型来接吧:
@RequestMapping(value = "to-engineerSelect")
@ResponseBody
public Feedback toEngineerSelect(HttpServletRequest request, HttpServletResponse response,
@RequestBody String engineers) throws IOException {
System.out.println(engineers + "======" + engineers.getClass().getName());
这样打印的数据就是Json格式的数据,但是在我用Json自带的将String类型的Json转化成Java对象的时候就有报错了,说是数据中多了一个e,报101错误。打印的数据是这样的:
engineers=[{"deptId":“70104',"userId":"ea1726365615","fullName":"小花","quantities":”30“,"engId":”01728367635613ea7d“,"engNum":”1373174918293“}];
然后我一看这是Json格式的数据啊,格式正确为何会报错?
3、然后我就猜想是不是多了一个engineers=这个东西,所以我就在前端修改了我的Js,修改如下:
$.ajax({
url:window.ctx+'/engineer/to-engineerSelect',
type:"post",
traditional:true,//阻止深度序列化
data:JSON.stringify(engineers),
dataType:"json",
contentType:"application/json; charset=utf-8" ,
success:function(feedback){
console.log(feedback.message)
});
data部分我直接简化成了JSON.stringify(engineers)。
后台就收代码将Json String类型的转化成list对象数组代码具体如下,这样就没有问题了:
@RequestMapping(value = "to-engineerSelect")
@ResponseBody
public Feedback toEngineerSelect(HttpServletRequest request, HttpServletResponse response,
@RequestBody List<AddEngineer> engineers) throws IOException {
System.out.println(engineers + "======" + engineers.getClass().getName());
Feedback feedback = null;
BigDecimal quantities = new BigDecimal(0);
// BigDecimal totalquantities = new BigDecimal(0);
ObjectMapper objectMapper = new ObjectMapper();
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, AddEngineer.class);
List<AddEngineer> list = objectMapper.readValue(engineers, javaType);
String engId = list.get(0).getEngId();
- Json传对象数组到后台并转化成Java对象数组
- 后台将多个java对象转化成json数组传到前端
- ajax传递json对象数组到后台
- 数组、对象数组转化成JSON对象的情况
- json对象转化字符串、数组
- JSON对象数组到Java的转换
- ajax 传对象数组到后台
- js接收并转化Java中的数组对象
- php curl获取到json对象并转成数组array
- 复选框选中table一行的数据,并组成JSON数组对象传递到后台,在后台解析遍历
- Java后台接收js数组对象,并解析
- JSON传数组对象到后台的过程和接收(TP框架)
- json数组转化为java对象、忽视不需要转化的json字段
- Json:前台对象数组传到后台解析
- Json:前台对象数组传到后台解析
- Json:前台对象数组传到后台解析
- Json:前台对象数组传到后台解析
- JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中
- 1128:检查一个数是否为质数
- Hibernate中,mappedBy和注解@JoinColumn的对比
- LeetCode1—Two Sum
- Restful API利器——RestPack项目教程
- play framwork2.X jpa(hibernate)配置
- Json传对象数组到后台并转化成Java对象数组
- JPush极光推送 Java调用服务器端API开发
- 【练习】数据结构和算法复习题
- 操作系统内核
- a标签的新发现
- Centos6.8下搭建SVN服务器
- SQL注入漏洞的简单代码实现,易懂
- 【PCL】将ply文件转换为pcd文件
- 【MySQL】——索引