Jetty太快结束了响应

时间:2015-12-22 07:57:31

标签: java spring tcp jetty jetty-9

Spring REST API(使用Jackson)在java 1.8.0_65服务器上通过jetty-distribution-9.3.0.v20150612在EC2 Linux机器上运行。

大多数API调用都运行良好,但有时我的客户端(移动应用/卷曲)会收到错误的响应 - curl: (18) transfer closed with outstanding read data remaining。它在本地和远程Jetty机器上重现,有无压缩和SSL。

我已经使用Wireshark捕获了通信,看起来在发送1414字节的块时,突然(在发送整个JSON内容之前),设置了FIN标志的较小块。

什么会导致块流过早结束?

更新

经过大量的分歧和征服后,我在响应对象中发现了一个表情符号,可能会导致问题。

但奇怪的是,更改该字符串中的任何数据,而不删除该字符将导致此操作。好像它不是角色本身,而是它在弦乐中的位置。

目前,响应对象通过spring-webmvc:4.1.7自动序列化为JSON,当此对象被手动序列化并发送时,它可以正常工作。持有该表情符号的数据成员注释为@JsonRawValue,其值已经序列化为JSON。

1 个答案:

答案 0 :(得分:0)

表情符号字符未在JSON响应中转义。

由于包含此表情符号的数据成员不是由Spring MVC序列化程序处理的,因此它是作为JSON对象中的原始字符串发送的,它是使用不处理整个集合的方法手动转义的unicode characters。

StringEscapeUtils.escapeJson(..)库提供的Apache commons-lang3:3.3.2替换手动转义方法解决了这个问题。