今天测试遇到以上的错误信息。
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('"' (code 34)): was expecting comma to separate Object entries; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('"' (code 34)): was expecting comma to separate Object entries
at [Source: java.io.PushbackInputStream@4f800344; line: 21, column: 4]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:238)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:223)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:201)
其实我们看错误的提示已经很明白了,当Json 转换的时候出现了异常。
什么的情况下会出现如下的错误呢?
不是标注的Json格式。
只要不是标准的Json格式都会遇到上面的异常信息。
赠送jar包:jackson-databind-2.12.5.jar;
赠送原API文档:jackson-databind-2.12.5-javadoc.jar;
赠送源代码:jackson-databind-2.12.5-sources.jar;
赠送Maven依赖信息文件:jackson-databind-2.12.5.pom;
包含翻译后的API文档:jackson-databind-2.12.5-javadoc-API文档-中文(简体)版.zip;
Maven坐标:com.fasterxml.jackson.core:jackson-databind:2.12.5;
标签:fasterxml、jackson、core、databind、中文文档、jar包、java;
使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。
人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
CentOS 7运行.sh脚本提示syntax error: unexpected end of file。脚本是通过本地电脑的notepad++编辑之后用ftp上传到CentOS 7服务器上的。
错误原因:
shell脚本在本地电脑编辑的,格式是dos(可以用vi编辑该shell脚本,进入命令行模式,输入:set ff 回车即可看到左下角显示fileformat=dos),在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以本地修改的sh文件在CentOS上运行每行都会多了一个CR,因此就会报错
当时我试着把json格式分成两部分 分别使用Feign接口调用服务间方法时都能调用 合在一起时就出现标题错误感觉奇怪 后续百度之后发现可能是由于JSON长度太大了 默认Feign的调用长度在2048 所以出现这个问题。我的代码里面的某个字段存入json格式的数据。
这个错误可能会有很多方面造成的,我就讲下我碰到的几个出错的方面吧
1.版本不兼容
spring的版本和jackson的版本不兼容导致的,这个也是我出错的原因,jackson版本2.8.9好像需要spring4.3版本以上,这个我不确定,我的spring版本4.2就出问题了
2.jackson包冲突导致的
如何查看maven的包冲突呢,可以·使用快捷键Ctrl+Shift+Alt+U,或者是打开pom.xml,右键选择maven,然后选择 Show Dependencies
进入依赖包结构之后,可以用走上方
解决fasterxml中string字符串转对象json格式错误问题。
springboot中jackson使用的包是fasterxml的。可以通过如下代码,将一个形如json格式string转为一个java对象:
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
mapper.readValue(字符串, javabean.class);
Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”。
Jackson框架包含了3个核心库:streaming,databind,annotations.Jackson还包含了其它数据处理类库,此外不作说明。
Jackson版本: 1.x (目前版本从1.1~1.9)与2.x。1.x与2.x从包的命名上可以看出来,1.x的类库中,包命名以:org.codehaus.jackson.xxx开头,而2.x类库中包命令:com.fastxml.jackson.xxx开头
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('
springboot在pom.xml中加入依赖com.fasterxml.jackson.core-jackson-databind后报错,报错如下:Error creating bean with name ‘requestMappingHandlerAdapter’ defined in class path resource
2021-10-09 14:19:38.152 INFO 13708 --- [ restartedMain] ConditionEvaluationReportLoggi
nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Alarm': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'xxx': was expecting ('true', 'false' or 'null')的错误的详细解决方法。
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('}' (code 125)): was expecting double-quote to start field name
at [Source: java.io.PushbackInputStream@642b7d86; line: 12, column...
通常来说,我们在日常开发中使用的是第3种方式,有时为了简便也会使用第2种方式,比如你要从一个很大的Json对象中只读取那么一两个字段的时候,采用databind方式显得有些重,JsonNode反而更简单。老版本的Jackson使用的包名为。