org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `object` out of START_ARRAY token

简介: 讲述如何处理 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `object` out of START_ARRAY token的问题

问题背景

详细的问题背景接上一篇博文Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 下面我们来解决上一篇博文中处理好ajax content-type报错问题之后的另一个问题

报错信息

报错信息内容如下

org.springframework.http.converter.HttpMessageNotReadableException: JSONparseerror: Cannotdeserializeinstanceof`com.dongao.project.tmupgradeorderrecord.domain.TmUpgradeOrderRecord`outofSTART_ARRAYtoken; nestedexceptioniscom.fasterxml.jackson.databind.exc.MismatchedInputException: Cannotdeserializeinstanceof`com.dongao.project.tmupgradeorderrecord.domain.TmUpgradeOrderRecord`outofSTART_ARRAYtokenat [Source: (PushbackInputStream); line: 1, column: 1]

这个报错信息的意思翻译过来也就是说:无法从START_ARAY令牌中反序列化“后端controller接收参数对象”的实例,简单理解就是前端传json参数到后端,在映射到对象字段的时候报错,那么这个问题怎么处理呢?

问题处理

首先我们需要知道前端传参的json格式是否是正确的格式,前端数据内容我们通过在页面添加console.log(data);打印在控制台

[{"name":"phone","value":"3"},{"name":"gwUserName","value":"3"},{"name":"orderNo","value":"1"},{"name":"deductionGoodsIds","value":"1"},{"name":"orderNo","value":"2"},{"name":"deductionGoodsIds","value":"2"},{"name":"gwlist","value":[{"orderNo":"1"},{"orderNo":"2"},{"orderNo":""}]}]

然后我们把入参放入到json格式化工具中可以看到前端数据可以正常转为json结构,说明数据没有问题

image.png

那么前端数据没有问题,但是后端报错反序列化问题,那么问题出在哪儿呢?这里我们再来看一下ajax 传参json格式数据的展示

image.png

在对比我们往后端传的参数可以观察到前后端多了“[”“]”,下面我们需要改造$('#form-tmUpgradeOrderRecord-add').serializeArray();方法

改造

这里我们改造后的代码

// 获取form下所有的字段并转换为json对象formToJSON: function(formId) {
varjson= {};
$.each($("#"+formId).serializeArray(), function(i, field) {
json[field.name] =field.value;
    });
returnjson;
}

改造页面代码

image.png

页面json入参控制台打印

{"phone":"3","gwUserName":"3","orderNo":"2","deductionGoodsIds":"2","gwlist":[{"orderNo":"1"},{"orderNo":"2"},{"orderNo":""}]}

此时的json入参已经没有前后的“[  ]”符号了,后端可以正常解析json入参到对象字段。

后端controller debug可以看到接收入参的对象中已经可以成功收到子表list数据了

image.png

至此,整个这关于前端json传参,后端解析json参数反序列化到对象的操作就算完成了,大功告成,后面就可以开心丰富业务逻辑内容了。


相关文章
|
5月前
|
监控 数据挖掘 API
快应用报错Module Error 分包要求 app.json#minPlatformVersion 不小于 1061, 当前值为 21解决方案-优雅草卓伊凡
快应用报错Module Error 分包要求 app.json#minPlatformVersion 不小于 1061, 当前值为 21解决方案-优雅草卓伊凡
169 0
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
299 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
存储 JSON Go
在Gin框架中优雅地处理HTTP请求体中的JSON数据
在Gin框架中优雅地处理HTTP请求体中的JSON数据
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
644 1
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
应用服务中间件 Shell 网络安全
nginx安装提示 libssl.so.3: cannot open shared object file: No
【8月更文挑战第1天】### 原因 未将安装的ssl中的`libssl.so.3`链接到`/usr/lib`导致缺失。 ### 解决方案 1. 检查openssl是否已安装,若为低版本则需重装。 ```sh whereis openssl
6758 6
|
JSON JavaScript 前端开发
Unexpected token u in JSON at position 0
这篇文章解释了JavaScript中"Unexpected token u in JSON at position 0"错误的常见原因,通常是由于尝试解析undefined变量导致的,并建议检查是否有变量在JSON.parse()执行时未赋值或值为undefined。
Unexpected token u in JSON at position 0
|
JSON 前端开发 JavaScript
JSON parse error: Cannot deserialize value of type `java.lang.Integer` from Boolean value
这篇文章讨论了前端Vue应用向后端Spring Boot服务传输数据时发生的类型不匹配问题,即后端期望接收的字段类型为`int`,而前端实际传输的类型为`Boolean`,导致无法反序列化的问题,并提供了问题的诊断和解决方案。
JSON parse error: Cannot deserialize value of type `java.lang.Integer` from Boolean value
|
关系型数据库 MySQL
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
2253 2
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
920 0

热门文章

最新文章

  • 1
    PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
    217
  • 2
    Java 中数组Array和列表List的转换
    839
  • 3
    JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
    659
  • 4
    通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据和性能优化,reduce()的使用详解(附实际应用代码)
    1432
  • 5
    通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
    547
  • 6
    通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
    358
  • 7
    多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解
    240
  • 8
    别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性
    241
  • 9
    Array.forEach实战详解:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提高Array.forEach的性能
    156
  • 10
    深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
    643