当前位置: 首页 > article >正文

com.alibaba.fastjson.JSONException: not close json text, token : error

今天遇到一个相当智障的问题,前端传参数到后端,后端直接报json解析错误,not close?? 听着就很奇怪,关键有的时候正常,有的时候不正常。于是先在浏览器中F12,看传的参数 感觉 没问题,在后端filter中获得request的body,打印出来,很长,也看不出来问题。
1、先来看一下用以接收参数的dto

@Data
public class DeliveryFeeProcessDTO extends TDeliveryFeeProcessRecord {

    /**
     * 货物明细
     */
    private List<TDeliveryFeeProcessGoodsInfo> goodsList;

    /**
     * 文件列表
     */
    private List<FileInfo> fileList;

    /**
     * 1 通过
     * 0 驳回
     */
    private Integer state;
}

项目中配置的是fastjson,1.2.83

  http:
    converters:
      preferred-json-mapper: fastjson       # Json转换器


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

可以看到有两个list 比较可疑··
2、看一下我精简后的json 字符串,这也能报错?

{"creatorId": "superadmin","goodsList": "","fileList": ""}

3、写一个demo

public static void main(String[] args) {
//        String json = "{\"creatorId\": \"superadmin\",\"goodsList\": \"\",\"fileList\": []}";
        dealJson("{\"creatorId\": \"superadmin\",\"goodsList\": \"\"}");
        dealJson("{\"creatorId\": \"superadmin\",\"fileList\": \"\"}");
        dealJson("{\"creatorId\": \"superadmin\",\"goodsList\": []}");
        dealJson("{\"creatorId\": \"superadmin\",\"fileList\": []}");
        dealJson("{\"creatorId\": \"superadmin\",\"goodsList\": \"\",\"fileList\": []}");
        dealJson("{\"creatorId\": \"superadmin\",\"goodsList\": \"\",\"fileList\": \"\"}");
        dealJson("{\"creatorId\": \"superadmin\",\"goodsList\": [],\"fileList\": []}");
        dealJson("{\"creatorId\": \"superadmin\",\"goodsList\": [],\"fileList\": \"\"}");
    }

    private static void dealJson(String json) {
        Boolean flag = true;
        try {
            DeliveryFeeProcessDTO dto = JSONObject.parseObject(json, DeliveryFeeProcessDTO.class);
        }catch (Exception e){
            flag = false;
//            System.out.println(json);
            System.out.println(e.getMessage());
//            e.printStackTrace();
        }
        if(flag){
            System.out.println("PASS"+json);
        }else {
            System.out.println("FAILED"+json);
        }
    }

出来的结果是

FAILED{"creatorId": "superadmin","goodsList": ""}
FAILED{"creatorId": "superadmin","fileList": ""}
PASS{"creatorId": "superadmin","goodsList": []}
PASS{"creatorId": "superadmin","fileList": []}
FAILED{"creatorId": "superadmin","goodsList": "","fileList": []}
FAILED{"creatorId": "superadmin","goodsList": "","fileList": ""}
PASS{"creatorId": "superadmin","goodsList": [],"fileList": []}
PASS{"creatorId": "superadmin","goodsList": [],"fileList": ""}

可以看到,应该是因为List不能是空字符串,必须是空数组才行
但是最后一个就很鬼畜了!!竟然PASS了!

好了,省流(我懒得去翻fastjson的源码,更懒得去看fastjson的release note)。解决办法是升级····简单粗暴。在maven仓库中查到最新是2.0.53

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.53</version>
        </dependency>

所以,每当你以为自己技术还行的时候,就会在小坑里栽跟头


http://www.kler.cn/a/415252.html

相关文章:

  • 我的工作知识总览
  • SpringBoot 接入 豆包 火山方舟大模型
  • 简单线性DP
  • HTML CSS JS基础考试题与答案
  • 51c大模型~合集79
  • 【docker】安装数据库脚本
  • HTTPS 的应用数据是如何保证完整性的?
  • 玩转 uni-app 静态资源 static 目录的条件编译
  • 【Linux】线程同步与互斥 (生产者消费者模型)
  • C#:时间与时间戳的转换
  • 一文解析Kettle开源ETL工具!
  • 评分规则的建模,用户全选就是满分10分(分数可自定义), 选2个5分, 选2个以下0分
  • Day31 贪心算法 part05
  • ChatGPT 网络安全秘籍(二)
  • 《普通逻辑》学习记录——复合命题和复合推理
  • 视觉语言模型(VLM)学习笔记
  • 楼顶气膜馆:引领科技感与声学完美结合的未来会议空间—轻空间
  • 40分钟学 Go 语言高并发:Go程序性能优化方法论
  • JVM:即时编译器,C2 Compiler,堆外内存排查
  • 自编码器(二)
  • Wireshark 4.4.2:安全更新、错误修复、更新协议支持
  • Kubernetes KubeVirt 让容器和虚拟机一起工作
  • NeuIPS 2024 | YOCO的高效解码器-解码器架构
  • redis下载、基础数据类型、操作讲解说明,持久化、springboot整合等
  • 【jvm】C2编译器
  • CrystalDiskInfo:硬盘健康监测工具简介和下载