Json传对象数组到后台并转化成Java对象数组
2017-08-27 21:35
399 查看
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();
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();
相关文章推荐
- java集合或对象转化为json数组或者对象的方法
- json数组转化为java对象、忽视不需要转化的json字段
- JSON传java对象数组到后台解析
- 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>
- 使用JAVA反射机制将简单JAVA been对象、数组转化为对应的Json串
- Java 对象,数组 与 JSON 字符串 相互转化
- 后台将对象转换为json格式,前台js解析json数据,将字符串转化为数组
- java中将数组、对象、Map、List转换成JSON数据
- json-lib将json格式的字符串,转化为java对象的实例
- fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
- Json转化为Java对象的实例详解
- java 实现json数组字符串遍历出json对象
- JSON 转化为java对象
- php数组转换为json,json又转化为php对象。
- java中把对象转化为byte数组的方法
- json对象、json格式字符串、java对象【使用此net.sf.json.JSONObject将java对象[比如数组集合Map、Map扩展]转换成json格式字符串】
- 使用Java进行Json数据的解析(对象数组的相互嵌套)
- 后台json字符串存到request传到前台转化为js对象多种方法实例
- JAVA对象、数组转JSON
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换