我通过RestTemplate调用一个endpoint,如下所示:
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);
我已经验证了entity
对象中的JSON字符串是有效的,方法是将其复制并在对同一endpoint的cURL请求中使用,没有任何错误。在此请求中也使用了相同的头和授权令牌。
当我执行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]
我的accept
和content-type
头都设置为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
或object.class
时发出请求,响应是中文字符:
restTemplate.postForObject(uri, entity, String.class);
嬀崀
我希望此调用返回一个空数组[]
。
当我将requestJSON
字符串更改为一个可以返回非空数组的字符串时,我将返回数百个汉字,而不是两个。
我如何像使用curl时一样解码响应以获得有效数据?
编辑:
我不确定这是如何联系的,但空数组[]
中字符的字节码是91和93,两个汉字的字节码是0、91、0、93。
不要使用UTF16。HTTP规范说ASCII,许多使用UTF8。错误通过charset=utf-16
指出了这一点。尝试设置请求的编码标头。
正如您在char代码中注意到的,您看到的正是使用UTF16时预期的结果,因为每个char是2个字节。
我向web服务添加了以下依赖项 现在我的代码中出现了以下问题,不知道哪里出了问题。在添加这个依赖项之前,它工作得很好。 下面是完整的pom 我不明白哪里出了问题
我正在将下面的sql查询转换为Snowflake,并得到错误“numeric Value”-“未识别”,但它没有行号。我假设它在整个查询中引用了各种“-1”实例,但没有引用任何行,所以不清楚是什么导致了这个问题。如果是对“-1”的各种引用--雪花中的替代方案是什么?Try_To_Number在这种情况下不起作用,所以希望社区有建议
我正在编写一个ANTLR Lexer和解析器语法,它将解析与Java类非常相似的文本。最终,它将解析如下所示的文本: 我正在慢慢地构建Lexer和Parser。我已经成功地解析了,但是在解析时遇到了困难。 在添加对的支持之前,我能够在解析器中为空格、冒号和分号使用字符串文字,但在我遇到错误创建隐式标记。我为这些字符中的每一个定义了一个词法分析器规则,并用该规则替换了所有出现的文字。但是,这破坏了s
我使用一个Spring Boot项目,我希望在程序启动后执行多个请求,而不是在程序启动后手动使用cURL。其目的是在存储器中存储一些数据,并使平台为进一步的操作做好准备。我使用的原始命令(运行良好), 如何在此方案中为POST调用正确设置媒体数据?