Spring RestTemplate JSON响应被截断

时间:2020-01-24 20:56:53

标签: java json spring spring-boot

我正在实现一个REST客户端,该客户端需要使用Spring Boot 2.2.2.RELEASE进行调用以从虚拟化数据存储中检索记录,这意味着底层Spring Framework是5.2.2.RELEASE。

我的问题是来自服务器的响应处理。当我使用spring基础结构来处理请求和响应时,JSON主体被剥离了。

这是我尝试过的最新代码的一部分:

ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new        HttpComponentsClientHttpRequestFactory(httpClient))
RestTemplate rt = restTemplateBuilder
                  .basicAuthentication(username, password)
                  .build()
rt.setRequestFactory(factory)
String uriString = targetString
final String response = rt.getForObject(uriString,String.class)
 println("Response: ${response}")

这应该以如下形式返回JSON有效负载作为字符串(仅用于测试目的)(已删除重要数据):

  "Salesforce_Truck_TripsResponse": {
    "Salesforce_Truck_TripsResult": {
      "row": [
        {
          "TICKET_NUMBER": "06805",
          "SCALE_TICKET_NUMBER": null,
          "PRODUCTION_DATE": "2019-10-01T00:00:00.000Z",
          "TRUCK_UNIT_NUMBER": "60028",
          "TICKET_PRODUCT": "EMULSION",
          "TICKET_TYPE": "O",
          "INTERNAL_FLAG": "Y",
          "TRUCK_CONFIGURATION": "B3X",
          "FLUID_VOLUME": 6.0000000000,
          "BATTERY_LOCATION": "hidden",
          "BATTERY_NAME": "hidden",
          "TO_FROM_LOCATION": "hidden",
          "TO_FROM_NAME": "hidden",
          "EXT_LOC_NAME": null,
          "EXT_LOC": null,
          "FIELD_NAME": "hidden",
          "VENDOR_NAME": "Some Vendor"
        },
        {.....more of the same (many, many, more) },....
      ]
    }
  }
}

相反,我得到以下信息:

Response: {"Salesforce_Truck_TripsResponse":{"Salesforce_Truck_TripsResult":[]}}

当我使用以下代码时:

String username = username
String password = password
String authString = "${username}:${password}"
byte[] authEnvBytes = Base64.encoder.encode(authString.getBytes())
String authStringEnc = new String(authEnvBytes)

URL url = new URL(targetString)
HttpURLConnection conn = (HttpURLConnection)url.openConnection()
conn.setRequestProperty("Authorization","Basic ${authStringEnc}")
conn.setRequestMethod("GET")
conn.setRequestProperty("Accept","application/json")

if(conn.getResponseCode() != 200){
    throw new RuntimeException("Failed!: HTTP error code: ${conn.getResponseCode()}")
}

String responseBody = StreamUtils.copyToString(conn.getInputStream(), Charset.defaultCharset())
println responseBody

我达到了预期。

我尝试使用不同的ClientHttpRequestFactory选项来查看这是否是一个缓冲问题,没有运气。

我尝试使用Spring库中的每个MessageConverter,但那里也没有运气。

我已经在RestTemplate上实现了拦截器,以根据https://objectpartners.com/2018/03/01/log-your-resttemplate-request-and-response-without-destroying-the-body/博客文章转储请求和响应信息。

我的响应头如下:


HTTP/1.1 200 OK
Date: Fri, 24 Jan 2020 20:48:59 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'self' data:; script-src 'self' data: 'unsafe-inline' 'unsafe-eval'; style-src 'self' data: 'unsafe-inline'; connect-src *
Strict-Transport-Security: max-age=31536000; includeSubDomains
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked

我正要把我的工作代码放入一种调用方法中并使用它,但是我想看看我是否缺少Spring Framework中的一些简单配置问题。

任何帮助将不胜感激。

0 个答案:

没有答案
相关问题