Java接收JSON数据转成map格式处理错误记录

Java接收JSON数据转成map格式处理错误记录

处理前端json数据Java接收,遇到几个错误,整理记录下,以便更好的理解使用。

一 Controller中方法定义

1、map数据

@RequestMapping(value = “****Pay”)
public R ****Pay(@RequestBody Map<String, Object> params) throws JsonProcessingException {
}

注意此处方法的定义:
1)、要求是JSON格式数据
2)、@RequestBody 虽然没有写是post请求,但是要是是post方式请求接口,用jmeter get方式会报错误。
3)、 Map<String, Object> params,框架会转成Map形式数据

其它写法:

2、接收String数据,自己解析

@PostMapping("/*****ByDate")
public R getEwalletByDate(@RequestBody String body) {}
会是一个string类型的Json格式数据,这个时候,可以转换String 为JSON对象进行数据解析处理。

3、直接转成对象,需要看框架内方法

public R update(@RequestBody ClassA classA) {}
直接就是获取到了对象,对象进行update操作。
没有框架转,按照(1)中获取string类型的数据,自己使用JSON方法也可以转对象,一句就完成,要求是JSON格式内容和定义的对象的数据匹配上。

二、数据解析

JSON数据

接收参数数据,想做个购物内容,把购物车数据传到后台,定义订单信息,存储订单和订单商品内容。
因为接收数据没有定义,商品内容定义的有对象,所以要解析数据,再自己处理。
数据简单示例
options={
“totalFee”:“56”,
“consignee”:“张三”,
“mobile”:“020-81111111”,
“address”:“广东省****号”,
“message”:“12点前送”,
“shopid”:“123”,
“userId”:256,
“shopcar”:[
{“img”:"/imgs/shops/f1.jpg",“serialNumber”:1,“price”:18,“num”:2,“id”:“1a001”,“ame”:“牛肉面”,“salesVolumes”:35},
{“img”:"/imgs/shops/f2.jpg",“serialNumber”:2,“price”:20,“num”:1,“id”:“1a002”,“ame”:“排骨面”,“salesVolumes”:15}
]
}
再来看下JSON数据,是一段字符串,使用不同意义的分隔符将其分割开来而已,我们看上面的符号,里面有[] ,{}等符号,其中
1 []中括号代表的是一个数组;
2 {}大括号代表的是一个对象
3 双引号“”表示的是属性值
4 冒号:代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型。

理解下这个结构,再复杂的结构也是这样的层级组合。Java转Json的时候,要注意下结构。

MAP数据解析

首先要每个类型对,例如 Strig 和int型,否则也会报错。 这个就是接口数据类型定义。
String shopid= (String) params.get(“shopid”);
Integer userId = (Integer) params.get(“userId”) ;

String shopcar = (String) params.get(“shopcar”);
报错:
java.util.ArrayList cannot be cast to java.lang.String
购物车Map转成了list 类型
List shopcar = (List) params.get(“shopcar”);

//解析订单购物车内容
开始写
String json = (String) shopcar.get(i);
Goods goods = new JSONObject().parseObject(json, Goods .class);
报错误
java.util.LinkedHashMap cannot be cast to java.lang.String
商品是一个LinkedHashMap类型,不是String,在转Map格式的时候,转成了LinkedHashMap
修改如下
for(int i = 0;i<shopcar.size();i++) {
logger.info(“shopcar.get(i)” + shopcar.get(i));
LinkedHashMap linkedHashMap = (LinkedHashMap) shopcar.get(i);
String goodsJson = new JSONObject().toJSONString(linkedHashMap);
//使用JSON转对象
Goods goods = JSON.parseObject(goodsJson, Goods.class);
}

数据处理完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值