繁体   English   中英

如何在Spring RestController中处理字符编码

[英]How to handle character encoding in spring RestController

我试图找到一些关于如何在RestController处理字符编码的RestController

Spring似乎完全忽略了Content-Type标头中发送的字符集。 无论使用此标头将哪个字符集发送到服务器,服务器都会尝试将其读取为UTF-8并使用字符集UTF-8发送响应。

这是一个GitHub存储库,其中包含一个重现此场景的演示: https//github.com/hawk1234/characterEncodingTest

有人能指出我在Spring文档中描述的位置吗? 我遇到了内容协商,但我认为这更多是关于响应格式而不是编码。

更新2018-11-01

我已经实施了一些测试,以更好地显示问题所在。 Commit 86dc434351d7ee2c142afc8f389e7837810b19f6包括EncodingTest类,它使用不同的编码测试端点。

我也实现了我的编码处理(Commit a26c5da0b25fba8a40e3be41e96​​7e6b1e5c4d546 ),但它是非常基本的实现,可能不考虑所有场景。 我仍在寻找使用现有库的更简单的解决方案。

默认情况下,charset是UTF-8, MappingJackson2HttpMessageConverter是管理charSet的人。 您可以通过实现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上创建了一个带有这些更改的pull请求,并且运行良好。 亲切的问候。

请在您的请求中尝试以下内容:

Accept-Charset: <US-ASCII or any charset you want to set>

请查看以下链接了解更多详情:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Charset

如果它适合您,请告诉我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM