解决Java字符串JSON转换异常:cn.hutool.json.JSONException: Mismatched hr and body

 更新时间:2024年01月16日 11:04:54   作者:促进者  
这篇文章主要给大家介绍了关于如何解决Java字符串JSON转换异常:cn.hutool.json.JSONException: Mismatched hr and body的相关资料,文中将解决的办法通过代码介绍的非常详细,需要的朋友可以参考下

报错起因:

1、在调用外部api接口,获取JSON字符串,通过各种JSON文件转对象的时候发现报错。

String post = HttpUtil.post(url, JSONUtil.toJsonStr(params));
JSONObject jsonObject = JSONUtil.parseObj(post);

报错信息如下:

cn.hutool.json.JSONException: Mismatched hr and body at 164 [character 6 line 6]
    at cn.hutool.json.JSONTokener.syntaxError(JSONTokener.java:413)
    at cn.hutool.json.xml.JSONXMLParser.parse(JSONXMLParser.java:99)
    at cn.hutool.json.xml.JSONXMLParser.parse(JSONXMLParser.java:164)
    at cn.hutool.json.xml.JSONXMLParser.parse(JSONXMLParser.java:164)
    at cn.hutool.json.xml.JSONXMLParser.parse(JSONXMLParser.java:164)
    at cn.hutool.json.xml.JSONXMLParser.parseJSONObject(JSONXMLParser.java:29)
    at cn.hutool.json.XML.toJSONObject(XML.java:101)
    at cn.hutool.json.ObjectMapper.mapFromStr(ObjectMapper.java:216)
    at cn.hutool.json.ObjectMapper.map(ObjectMapper.java:98)
    at cn.hutool.json.JSONObject.<init>(JSONObject.java:210)
    at cn.hutool.json.JSONObject.<init>(JSONObject.java:187)
    at cn.hutool.json.JSONObject.<init>(JSONObject.java:142)
    at cn.hutool.json.JSONObject.<init>(JSONObject.java:125)
    at cn.hutool.json.JSONUtil.parseObj(JSONUtil.java:88)

排查过程:

一开始,我一直以为是因为hutool 工具,或者其他JSON有转换的异常,百度,谷歌很多方案,只提示了问题是xml转body错误。
一般这种问题还是要看你转换报错信息,最好给日志打印出来,后来通过try,catch,以及日志打印异常,最终知道报错原因:

<html>
<head><title>504 Gateway Time-out</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Time-out</h1></center>
<hr><center>nginx</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->

总结: 问题出现在http请求外部接口的时候,有时候,可能存在网络抖动,后者过于频繁的请求接口,导致接口偶发性的出现504网络异常。导致自己需要查找的数据没有查找到,或者解析出来。

最终解决办法:

通过重试机制,三次延时调用接口,提高对调用接口这种偶发性的问题的解决方案。

		JSONObject jsonObject = null;
        int count = 0;
        while (count < 3) {
            try {
                String post = HttpUtil.post("url", JSONUtil.toJsonStr(params));
                jsonObject = JSONUtil.parseObj(post);
                count = 3;
            } catch (Exception e) {
                log.error("JSON异常:{}", e.getMessage());
                count++;
                try {
                    log.warn("=============第{}次等待{}秒后重新请求接口=============", count, 5 * count);
                    Thread.sleep(5000 * count);
                } catch (InterruptedException interruptedException) {
                    interruptedException.printStackTrace();
                }
            }
        }

总结 

到此这篇关于解决Java字符串JSON转换异常:cn.hutool.json.JSONException: Mismatched hr and body的文章就介绍到这了,更多相关Java字符串JSON转换异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Cloud使用Feign实现Form表单提交的示例

    Spring Cloud使用Feign实现Form表单提交的示例

    本篇文章主要介绍了Spring Cloud使用Feign实现Form表单提交的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 语言和 API 功能。在本文中,我们将重点放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表达式,方法引用,JSR-310的日期和时间,和可重复注释。下面跟着小编一起来看下吧
    2017-03-03
  • Java RMI机制讲解

    Java RMI机制讲解

    这篇文章主要介绍了Java RMI机制讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 详解Java的堆内存与栈内存的存储机制

    详解Java的堆内存与栈内存的存储机制

    这篇文章主要介绍了Java的堆内存与栈内存的存储机制,包括JVM的内存优化和GC等相关方面内容,需要的朋友可以参考下
    2016-01-01
  • java的SimpleDateFormat线程不安全的几种解决方案

    java的SimpleDateFormat线程不安全的几种解决方案

    但我们知道SimpleDateFormat是线程不安全的,处理时要特别小心,要加锁或者不能定义为static,要在方法内new出对象,再进行格式化,本文就介绍了几种方法,感兴趣的可以了解一下
    2021-08-08
  • 深入探究Java线程与进程有哪些区别

    深入探究Java线程与进程有哪些区别

    这篇文章主要介绍了Java并发编程之线程创建,进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是一个实体,一个进程中至少有一个线程,下文更多相关内容需要的小伙伴可以参考一下
    2022-04-04
  • 通过Spring Security魔幻山谷讲解获取认证机制核心原理

    通过Spring Security魔幻山谷讲解获取认证机制核心原理

    这篇文章主要介绍了通过Spring Security魔幻山谷讲解获取认证机制核心原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 基于swagger参数与实体中参数不一致的原因分析

    基于swagger参数与实体中参数不一致的原因分析

    这篇文章主要介绍了基于swagger参数与实体中参数不一致的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • springboot集成flyway自动创表的详细配置

    springboot集成flyway自动创表的详细配置

    Flayway是一款数据库版本控制管理工具,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里;本文通过实例代码给大家介绍springboot集成flyway自动创表的详细过程,感兴趣的朋友一起看看吧
    2021-06-06
  • 基于Mybatis plus 自动代码生成器的实现代码

    基于Mybatis plus 自动代码生成器的实现代码

    本文通过实例代码给大家介绍了基于Mybatis-plus 自动代码生成器的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05

最新评论