JSON格式错误报JSON parse error:
问题
前端传Json格式数据到后台后,springmvc报
org.springframework.http.converter.HttpMessageNotReadableException:* JSON parse error: Can not deserialize instance of java.lang.String out of START_OBJECT token;* nested exception is com.fasterxml.jackson.databind.JsonMappingException:* Can not deserialize instance of java.lang.String out of START_OBJECT token* at [Source: java.io.PushbackInputStream@6822f8aa; line: 1, column: 88] (through reference chain: com.xxx.XXXDto["employees"])
方案
我们要解决这个问题,可以使用Spring中的统一异常处理方式 里面介绍的一种
@ExceptionHandler({HttpMessageNotReadableException.class, JsonMappingException.class, HttpMediaTypeNotSupportedException.class})@ResponseBody@ResponseStatus(HttpStatus.BAD_REQUEST)public Map<String,Object> exceptionHandler(Exception ex){Map<String,Object> map = new HashMap<>(3);try{map.put("code","400");map.put("msg",ex.getMessage());return map;}catch (Exception e){log.error("exception handler error",e);map.put("code","400");map.put("msg",e.getMessage());return map;}}
解决过程遇到的问题
上面方法虽然能够处理JSON格式错误的问题,但是返回给前端的数据内容就是下面格式
JSON parse error: Can not deserialize instance of java.lang.String out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token at [Source: java.io.PushbackInputStream@6822f8aa; line: 1, column: 88] (through reference chain: com.xxx.XXXDto["callBackUrl"])
一眼看不到是什么问题,就算是熟悉了这个错误,也不能马上找到是哪个地方出的问题,因为我们需要对上面的数据进行加工后再返回给前端
最终解决问题
我们debug源码发现,改异常是在springframework的org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter
里面抛出的
异常是JsonMappingException extends JsonProcessingException
,springmvc里抛出了HttpMessageNotReadableException
,因此,我们只需要在统一异常处理的地方添加对应处理逻辑,就可以友好返回给前端
@ExceptionHandler({HttpMessageNotReadableException.class, JsonMappingException.class, HttpMediaTypeNotSupportedException.class})@ResponseBody@ResponseStatus(HttpStatus.BAD_REQUEST)public Map<String,Object> exceptionHandler(Exception ex){Map<String,Object> map = new HashMap<>(3);try{if(ex instanceof HttpMessageNotReadableException&& ex.getMessage().indexOf("JSON parse error:")>-1){map.put("code","400");String message=ex.getMessage();int beginIndex=message.indexOf("XXXDto[\"");int endIndex=message.indexOf("\"])",beginIndex);message="参数"+message.substring(beginIndex+22,endIndex)+" 格式错误";map.put("msg",message);}else{map.put("code","400");map.put("msg",ex.getMessage());}return map;}catch (Exception e){log.error("exception handler error",e);map.put("code","400");map.put("msg",e.getMessage());return map;}}
JSON格式错误报JSON parse error:相关推荐
- (转)解决fasterxml中string字符串转对象json格式错误问题(无引号 单引号问题)...
原文地址:解决fasterxml中string字符串转对象json格式错误问题 com.fasterxml.jackson.databind.ObjectMapper mapper = new com ...
- FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. JSONObject:fas ...
- fastjson 检测json格式_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换...
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. JSONObject:fas ...
- SpringCloud工作笔记047---FastJson解析多级JSON_FastJson解析嵌套JSON_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
JAVA技术交流QQ群:170933152 解析嵌套json,这里说一下: //下面可以通过解析多级json的方式,获取数据,插入到数据库 //JSONObject userJsonObj = JSO ...
- bison版本问题导致编译报错:‘parse.error‘ is not used
bison版本问题导致编译报错:'parse.error' is not used 'parse.error' 问题定位和修正 问题发现 问题调查与定位 更新bison/flex版本 问题修正 一些参 ...
- 数据传输:json格式序列化与反序列化(将类转化为json格式与将json格式转化为类)
数据传输:json格式序列化与反序列化(将类转化为json格式与将json格式转化为类) 在最近的实验中,使用了json来传送客户端与服务端的信息,之前原本想使用自己定义的格式,但是使用json可以将 ...
- Json格式错误问题:加注释引起的报错
报错内容: JSON parse error: Unexpected character ('/' (code 47)): maybe a (non-standard) comment? (not r ...
- 把执行结果转成json对象报错_于一次JSON格式错误 之 手把手带你走一波FastJSON将对象转成JSON字符串流程...
一.前言 最近老大说要新增一个试用广告的功能,我巴拉巴拉的从之前推送广告那里将代码cv过来,然后跟老大说搞定了!过一会老大说返回的json格式不对!于是乎我瞧了瞧: { "adsArea1& ...
- android判断是否json格式,Android判断json格式将错误信息提交给服务器
开发中发现, 服务器偶尔会发送错误格式 json 给 Android 客户端, 导致 Android 客户端 json解析失败, 应用异常. 并非服务器有意坑客户端, 而是客户端请求服务器数据时, 除 ...
- Json格式转换报java.lang.StackOverflowError
栈溢出就是缓冲区溢出的一种. 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果.程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区.如果向缓冲 ...
最新文章
- Oracle对sum求和进行if,Excel中sumif函数和sumifs函数进行条件求和的异同
- from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver,
- 用TensorFlow基于神经网络实现井字棋(含代码)
- React学习小结(二)
- urllib2库的基本使用
- 一篇价值过百万的日志
- android8 twrp 小米6,小米6一键刷入TwrpRecovery工具
- 二阶压控电压源低通滤波器的传递函数
- 揭秘淘宝286亿海量图片存储与处理架构(转)
- 保乐力加在四川峨眉山兴建中国首家麦芽威士忌酒厂
- 两台win10电脑网线直连,使用Synergy实现鼠标键盘共享设置
- Hadoop回顾:(一)Hadoop生态系统简介
- Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)
- 计算机锁屏域策略,域组策略锁屏界面设置不生效
- python怎么群发邮件_python群发邮件怎么做
- 从执行计划的预估行数看执行计划是否正确
- 【原】计算机Tools vs 学习资料
- 基于ijkplayer实现低延迟直播播放器
- 腾讯开源 Kotlin 高性能特效动画组件!
- Linux cp命令的使用方法与参数含义
热门文章
- jsp中对jstl一些标签的引用方式
- DataTable转成字符串复制到txt文本
- android 颜色测试,颜色 大师 (Color Sense Master) - 颜色测试
- ActiveMQ(二)——常用api、持久化、签收模式、以及常见问题
- 最常用的springmvc注解使用技巧
- 分布式文件存储FastDFS之安装Nginx实现文件访问
- Spring Cloud Eureka详解
- Python中流程控制-for循环(序列/字典举例)
- 10.3. TUI (Text User Interface)
- Silverlight 简介 Part.1(理解 Siverlight)