java - 如何在 spring RestController 中处理字符编码

标签 java spring http spring-boot character-encoding

我试图找到一些关于我应该如何在我的 RestController 中处理字符编码的信息。

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

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

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

2018-11-01 更新

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

我还实现了我的编码处理(提交 a26c5da0b25fba8a40e3be41e96​​7e6b1e5c4d546),但这是非常基本的实现,可能不会考虑所有情况。我仍在寻找使用现有库的更简单的解决方案。

最佳答案

默认字符集为 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/

相关文章:

java - Java 中的流式传输到 IntStream

java - HttpMediaTypeNotAcceptableException : Could not find acceptable representation in exceptionhandler

c++ - 使用 Qt 中的命名参数列表发出 HTTP POST 请求

java - 错误 : Could not find or load main class bankAccount. 银行帐户

java - 无论现有帐户如何,select count(*) 都会返回 true

Java:仅通过计算其哈希码从集合中检索对象

java - 为什么我的 Spring @Autowired 字段为空?

java - 上下文中的多个包:component-scan, spring config

C++ Http POST 400 错误请求

node.js - 错误 : No default engine was specified and no extension was provided