我正在实现一个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中的一些简单配置问题。
任何帮助将不胜感激。