Java 接收 JSON 数据时,某些参数多了逗号的解决方案

问题描述:
写了一个实体类dto作为参数传递,在用Postman进行接口测试时,发现从controller层获取到的日期(startTime)前多了一个逗号(,),从而导致查询结果出错。

 "startTime": ",2020-08-05"

问题排查:
1、首先排查了Postman中传入的数据,并未发现有多余的逗号。
2、其次排查了接口相关的调用方法,也并未发现有涉及到添加逗号的操作。
3、对参数解析进行排查
(1)因涉及到的参数太多,于是去掉所有非必要参数,JSON数据解析正常,查询结果正常
(2)恢复所有非必要参数,JSON数据解析出现上述问题(日期数据前多了一个逗号),查询结果出错
(3)锁定问题出现在非必要参数的解析后,通过认真排查,发现日期(startTime)作为参数传递时出现了重复,错误原因锁定

解决方法:
将重复的日期参数去掉,JSON数据解析正常,查询结果正常。

拓展分析:
经过测试发现,如果同一个参数在传递过程中出现了重复赋值,那在数据解析的过程中,重复传入的值将会通过以逗号隔开的方式被拼接,然后进行传递,即便在重复赋值时,重复参数的其中一个并未传递实际的值(null或者""),在进行JSON数据解析后,参数值依旧会被拼接,如下所示:

 // 传入的 JSON
 {
     "startTime":,
     "startTime": "2020-08-05",
     
     "endTime": "2020-08-05",
     "endTime": "2020-08-06"
 }//接收到的参数
 "sTime": ",2020-08-05"
     
 "eTime": "2020-08-05,2020-08-06"

如果从未遇到过这类问题,可能排查起来也需要一点时间,不过有了经验之后,如果再遇到类似问题,便可迅速定位到问题所在,并将其解决。

Java中,我们可以使用各种方式接收JSON数据类型参数。以下是两种常用的方法: 1. 使用第三方库:我们可以使用像Jackson或Gson这样的第三方库,这些库提供了强大的JSON解析和序列化功能。我们可以使用这些库来接收JSON参数,并将其解析为Java对象。 首先,我们需要添加相关的依赖库到我们的项目中。然后,我们可以使用这些库提供的API来完成JSON的解析和反序列化。 例如,使用Jackson库,我们可以这样接收JSON参数: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class MyClass { public static void main(String[] args) { // 定义一个JSON字符串 String json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); try { // 将JSON字符串解析为Java对象 MyClass myObject = objectMapper.readValue(json, MyClass.class); // 访问解析后的Java对象属性 System.out.println("Name: " + myObject.name); System.out.println("Age: " + myObject.age); System.out.println("City: " + myObject.city); } catch (Exception e) { e.printStackTrace(); } } private String name; private int age; private String city; // getter和setter方法 } ``` 2. 使用Java内置的JSON库:Java SE 7及以后版本内置了一个简单的JSONjavax.json。我们可以使用这个库来接收JSON参数并进行操作。 为了使用这个库,我们需要添加相应的依赖库到我们的项目中。 例如,使用javax.json库,我们可以这样接收JSON参数: ```java import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; public class MyClass { public static void main(String[] args) { // 定义一个JSON字符串 String json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; // 创建JsonReader对象 JsonReader jsonReader = Json.createReader(new StringReader(json)); // 读取JSON字符串并解析为JsonObject JsonObject jsonObject = jsonReader.readObject(); // 访问JsonObject中的属性 System.out.println("Name: " + jsonObject.getString("name")); System.out.println("Age: " + jsonObject.getInt("age")); System.out.println("City: " + jsonObject.getString("city")); // 关闭JsonReader jsonReader.close(); } } ``` 以上是两种常用的方式来接收JSON数据类型参数。根据项目的具体需求和开发团队的偏好,可以选择适合的方法来处理JSON数据
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值