我正在尝试查找有关如何处理RestController
中的字符编码的信息。
Spring似乎完全忽略了Content-Type
标头中发送的字符集。无论使用此标头将哪个字符集发送到服务器,服务器都会尝试将其读取为UTF-8并使用字符集UTF-8发送响应。
这是一个GitHub存储库,其中包含一个演示此场景的演示:https://github.com/hawk1234/characterEncodingTest
有人可以指出我在Spring文档中的描述位置吗?我遇到了内容协商,但我认为这更多是关于响应格式而不是编码。
更新2018-11-01
我已经实施了一些测试以更好地说明问题所在。提交 86dc434351d7ee2c142afc8f389e7837810b19f6 包含类EncodingTest
,该类使用不同的编码来测试端点。
我还实现了我的编码处理(commit a26c5da0b25fba8a40e3be41e967e6b1e5c4d546 ),但这是非常基本的实现,可能未考虑所有情况。我仍在寻找使用现有库的更简单解决方案。
答案 0 :(得分:0)
默认字符集为UTF-8, MappingJackson2HttpMessageConverter 由谁来管理字符集。您可以通过实现Bean并将charSet设置为null来覆盖。
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
jsonConverter.setObjectMapper(objectMapper);
jsonConverter.setDefaultCharset(null);
return jsonConverter;
}
我在您的存储库pullRequestCharacterEncoding中创建了具有这些更改的请求请求,并且运行良好。 此致。
答案 1 :(得分:0)
请在您的请求中尝试以下操作:
Accept-Charset: <US-ASCII or any charset you want to set>
请查看以下链接以获取更多详细信息:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Charset
请告诉我它是否适合您