@[TOC](请求服务器异常:JSON parse error: Unexpected end-of-input: was expecting closing ‘"’ for name; nested exception is … ‘"’ for name at [Source: (PushbackInputStream); line: 1, column: 5]))
问题起因:EMQX 4.0.5 WebHook BUG
开发调试EMQX 4.0.5 WebHook功能时发现当payload长度大于一定字符数时WebHook接收方接收请求参数异常 HttpStatus 400 错误。
JSON 解析异常
JSON parse error: Unexpected end-of-input: was expecting
closing '"' for name; nested exception is com.fasterxml.jackson.core.io.JsonEOFException: Unexpected end-of-input: was expecting closing '"' for name
at [Source: (PushbackInputStream); line: 1, column: 5]
服务端日志打印信息,此段信息表明请求方请求参数无法被JSON解析。JSON信息不完整。
原因
POST请求方即EMQX broker,请求POST接口时 header 中 content-length 长度与实际请求长度不一致 导致请求的JSON信息不完整。
此处用到Linux 抓包工具 tcpdump
查看HTTP POST请求
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
EMQX broker 在4.1 版本已解决此问题
与此问题类似的 issue:
https://github.com/emqx/emqx/issues/3382
解决方案
更新4.1以上版本