POST请求传特殊字符至RequestBody遇HttpMessageNotReadableException问题
问题分析
你遇到的HttpMessageNotReadableException是因为请求体中的\b(退格符)属于ASCII控制字符,Spring默认的Jackson JSON解析器对这类字符处理较为严格,导致解析失败。虽然\b是JSON规范允许的转义序列,但Jackson默认配置会拒绝包含这类控制字符的请求内容。
解决方案
有两种可行的处理方式:
1. 配置Jackson允许控制字符
通过自定义Jackson的ObjectMapper,开启允许未转义控制字符的特性,让解析器正确处理这类特殊字符:
@Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); // 允许JSON中包含未转义的控制字符 mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); return mapper; } }
该配置全局生效,所有通过@RequestBody解析的JSON请求都能处理控制字符。
2. 使用Unicode转义序列代替原始控制字符
将\b替换为对应的Unicode转义序列\u0008,修改后的请求体如下:
{ "name": "\u0008Color", "displayName": "\u0008Color", "position": 6 }
这种方式无需修改后端配置,直接在请求体中用Unicode编码表示特殊控制字符,几乎所有JSON解析器都能正确识别这类转义序列。
注意事项
- 若业务场景频繁需要处理这类特殊控制字符,推荐使用第一种全局配置方式;
- 若仅个别请求需要传递特殊字符,第二种Unicode转义方式更轻量,无需改动后端代码。
内容的提问来源于stack exchange,提问作者Kira Sign
相关产品推荐
相关产品推荐

