我试图找到一些关于我应该如何在我的 RestController
中处理字符编码的信息。
Spring 似乎完全忽略了 Content-Type
header 中发送的字符集。无论使用此 header 将哪个字符集发送到服务器,服务器都会尝试将其读取为 UTF-8 并使用字符集 UTF-8 发送响应。
这是一个 GitHub 存储库,其中包含重现此场景的演示:https://github.com/hawk1234/characterEncodingTest
有人可以指出它在 spring 文档中的描述吗?我遇到了内容协商,但我认为它更多的是关于响应格式而不是编码。
2018-11-01 更新
我已经实现了一些测试以更好地显示问题所在。提交 86dc434351d7ee2c142afc8f389e7837810b19f6 包括使用不同编码测试端点的类 EncodingTest
。
我还实现了我的编码处理(提交 a26c5da0b25fba8a40e3be41e967e6b1e5c4d546),但这是非常基本的实现,可能不会考虑所有情况。我仍在寻找使用现有库的更简单的解决方案。
最佳答案
默认字符集为 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并且效果很好。 亲切的问候。
关于java - 如何在 spring RestController 中处理字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973473/