最近在使用Postman测试接口,POST请求发送JSON格式的数据。之前一直风平浪静,没什么问题。不过最近测试一直失败,得到的响应是500内部错误,于是去服务器看错误信息,信息如下:

2018-09-03 16:27:15.444 ERROR [] 4365 --- [nio-8180-exec-6]  
JSON parse error: Invalid UTF-8 start byte 0xbf; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xbf
 at [Source: java.io.PushbackInputStream@1bda0319; line: 1, column: 3]
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Invalid UTF-8 start byte 0xbf; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xbf
 at [Source: java.io.PushbackInputStream@1bda0319; line: 1, column: 3]
        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)
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:150)
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:128)
        at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
        at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at cn.com.git.nfcfront.common.xss.XssFilter.doFilter(XssFilter.java:23)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
        at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
        at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
        at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
        at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
        at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
        at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
        at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
        at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
        at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
        at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:115)
        at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:59)
        at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:90)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:108)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1437)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
Caused by: com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xbf
 at [Source: java.io.PushbackInputStream@1bda0319; line: 1, column: 3]
        at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702)
        at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidInitial(UTF8StreamJsonParser.java:3544)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._decodeCharForError(UTF8StreamJsonParser.java:3286)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3519)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2686)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:878)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:772)
        at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3850)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2938)
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:235)
        ... 88 common frames omitted

网上查相关资料说是什么响应消息头的问题,又说是编码的问题,我想了想我的情况应该不是,毕竟之前也是按照这个来的,一直没啥问题。这个异常很清楚,JSON解析失败了,至于为什么会失败,原因让我很无语。

原来最近终端工具从CRT换成了MobaXterm,从生产环境拷贝数据到测试时,竟然发现它在JSON串中加入了两个>符号,这个符号被加在了中文串中,不容易发现,并且使用JSON格式化校验也查不出问题来。 而就是这个藏在中文串中的符号存在,所以导致fastJson解析失败了,我想正是这个字符被加入其中却没有转义的原因。于是我把这两个>字符删掉后,终于成功的调通了接口。

可见,使用fastJSON解析JSON数据时,遇到这些特殊字符,如果不转义,就可能出现此异常。 需要被转义

">", ">"
"<", "&lt;"
" ", "&nbsp;"
"\"", "&quot;"
"\'", "&#39;"
"\\", "\\\\"
"\n", "\\n"
"\r", "\\r"
Windows下RequestBody里中文格式 JSON 解析报错 大年29, 项目终于完工, 火急火燎的上线部署, 服务器是Windows系统, 项目框架是SpringBoot2.2.11, 打成jar包运行后测试报错, 报错信息如下: JSON parse error : Invalid UTF- 8 middle byte 0xe8; nested exception is com.fasterxml.jackson.databind. Json MappingException: Invalid U Invalid UTF- 8 start byte 0xbf at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 11] (through reference chain: co 这两天,迭代开发一个简单小需求,POST 请求接收前端的传参,将接收到的 JSON 格式再转换成对应的 POJO,但是在程序接收请求过程中却报了如下 异常 : org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error : Invalid UTF- 8 start byte 0xa0; nested exception is com.fasterxml.jackson.core. Json Parse Excep @ApiOperation(value="取消关注") @PostMapping("cancelFollow") public R cancelFollow(@RequestBody CancelFollowVo cancelFollowVo) { 当我部署到服务器上时测试出现了这个问题 Closing non transactional... 原因分析: 打断点调试,发现没有进入接口。问题定位在接口请求参数问题,网上查相关资料说是什么响应消息头的问题,又说是编码的问题。说在JAVA Options:增加【-Dfile.encoding= UTF- 8、server.xml增加【URIEncoding=‘ UTF- 8’】、请求头部加Content-Type = application/ json ;charset= utf- 8等等之类,发现这些都已经设置过了。 解决方案: 最后发现请求参数格式错误:参数前面多了 Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":" JSON parse error : Invalid UTF- 8 middle byte 0x3f 造成上述错误的原因:jvm参数未配置编码格式和eclipse 工作空间未指定编码格式。 解决办法:指定jvm 编码格式 打开Windows 然后在tomcat下bin的catalina.bat 中,set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding= UTF- 8(见下图)首先在tomcat下conf的server.xml中,在Connector 标签中添加编码属性:URIEncoding=" UTF- 8"(见下图)本地idea开发环境没有问题,部署到外置tomcat之后,带中文的post请求报400错误。纯英文提交没有问题,中文报错,说明跟编码格式有关。添加完成之后,但是没有解决问题。 请注意, JSON 规范不允许数字以0开头,因为0开头的数字在 JSON 中被解释为八进制数。如果你需要传递一个整数值,而该值以0开头,你可以将其转换为字符串,以避免 JSON 解析错误。例如,将整数值123转换为字符串"123",以便正确地在 JSON 中传递。要解决这个问题,您可以确保在 JSON 数据中传递的数字字符串不以0开头,或者修改后端代码来处理以0开头的数字字符串。这个 异常 是因为在 JSON 数据中传递了一个数字字符串,但该数字字符串以0开头,而 JSON 中数字不能以0开头。 JSON parse error : Invalid UTF- 8 start byte 0x8b问题描述报错信息报错环境解决方案例子 接口在本地测试没有问题,放在服务器后就会报400,参数中文编码报错 JSON parse error : Invalid UTF- 8 start byte 0x8b spring boot 在发送post请求时 在服务器启动项目时增加编码限制 -Dfile.encoding= UTF- 8 java -jar -Dfile.enco org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error : Invalid UTF- 8 start byte 0xa0; nested exception is com.fasterxml.jackson.core. Json Parse Exception: Invalid UTF- 8 start byte 0xa0 at [Source: (Pushbac nested exception is com.fasterxml.jackson.databind. Json MappingException: Invalid UTF- 8 start byte 0xbd at [Source: (PushbackInputStream); line: 14, column: 22] at [Source: (PushbackInputStr...