【发布时间】:2017-06-09 08:02:29
【问题描述】:
我们使用了int-http:outbound-gateway
<int-http:outbound-gateway request-channel="userDataRequest"
id="outboundUserDetailsGateway" url-expression="url"
http-method="GET" expected-response-type="com.xxx.UserResponse">
</int-http:outbound-gateway>
我们从出站网关发出的 GET 请求工作正常。我们已经通过各种 rest clients/curl 对其进行了验证。
流程概览
用户点击了一些发布请求(入站请求)。该请求由 int-http:inbound-gateway 检索。为了获取一些详细信息,我们的系统向其他系统发出了上面提到的一个 GET(出站请求)请求。
问题 当 curl/jmeter/Advance rest 客户端完成入站请求(POST)时,它工作正常,但是,如果该请求来自邮递员/回旋镖,则显示
org.springframework.http.converter.HttpMessageNotReadableException:无法读取文档:非法字符((CTRL-CHAR,代码 31)):标记之间只允许常规空格(\r、\n、\t) 在 [来源:java.io.PushbackInputStream@3f0a204c;行:1,列:2];嵌套异常是 com.fasterxml.jackson.core.JsonParseException:非法字符((CTRL-CHAR,代码 31)):标记之间只允许常规空格(\r、\n、\t) 在 [来源:java.io.PushbackInputStream@3f0a204c;行:1,列:2]
当系统遇到出站请求 (GET) 请求时,我们会收到此错误。
【问题讨论】:
-
什么是问题?为什么杰克逊不允许 CTRL-CHAR 作为空格?
-
为什么不同来源的行为不同。就像使用 CURL 一样,使用像邮递员这样的 Restclient 是可以的。它显示提到的错误。我期待想法,执行行为差异的可能原因是什么。
-
CURL 和 Java 使用不同的机制来读取 JSON。更多 CURL 不会将 JSON 解析为特定对象,就像在杰克逊的情况下发生的那样
-
有人找到解决办法了吗?
-
@UditKumawat 添加了对我们有用的答案。
标签: spring spring-integration rest-client spring-rest