【问题标题】:int-http:outbound-gateway HttpMessageNotReadableExceptionint-http:outbound-gateway HttpMessageNotReadableException
【发布时间】: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


【解决方案1】:

在我们的例子中,我们在服务端 Nginx 的 gzip 中包含 application/json。我们刚刚从 gzip 中排除了 application/json,它对我们有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多