我通过 RestTemplate 调用端点,如下所示:
SSLContext sslContext = SSLContexts.createSystemDefault();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
HttpClient client = HttpClientBuilder.create().setSSLSocketFactory(socketFactory).build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(client);
HttpEntity<String> entity = new HttpEntity<>(requestJson, headers());
Object[] response = restTemplate.postForObject(uri, entity, Object[].class);
我已经通过将对象中的 JSON 字符串entity
复制并在对同一端点的 cURL 请求中使用它而没有任何错误来验证对象中的 JSON 字符串是有效的。此请求中也使用了相同的标头和授权令牌。
当我执行 POST 时,我得到以下错误:
Error while extracting response for type [class [Ljava.lang.Object;] and content type [application/json;charset=utf-16]
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token '嬀崀': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token '嬀崀': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (InputStreamReader); line: 1, column: 3]
Myaccept
和content-type
headers 都设置为application/json
. 通过检查 cURL 的输出,我发现响应正文中没有中文字符。
响应头如下:
Connection →keep-alive
Content-Encoding →gzip
Content-Type →application/json; charset=utf-8
Date → xxx
Transfer-Encoding →chunked
Vary →Accept-Encoding
当我使用responseType
设置为String.class
or发出请求时Object.class
,响应是中文字符:
restTemplate.postForObject(uri, entity, String.class);
嬀崀
我期待这个调用应该返回一个空数组[]
。
当我将requestJson
字符串更改为应该返回一个非空数组的字符串时,我得到了数百个汉字,而不仅仅是两个。
如何解码响应以获取有效数据,例如使用 cURL 时?
编辑:
我不知道这有什么关系,但是空数组中的字符的字节码[]
是91和93,而这两个汉字的字节码是0、91、0、93。