Spring Boot Web POST接口接收JSON字符串时反斜杠未转义问题
Spring Boot POST接口接收JSON数组字符串时转义符未自动处理的原因及解决方法
原因分析
你猜的没错——当用@RequestBody String接收请求体时,Spring Web会原封不动地把请求体的所有内容转换成字符串,包括其中的转义符\。这是因为:
- Spring把整个请求体当作普通文本处理,不会自动识别它是JSON格式,自然不会触发转义处理逻辑;
- 你从Postman发送的其实是一个JSON字符串类型的请求体(比如外层带引号,内部用
\"转义双引号),这些转义符是请求体本身的一部分,并非传输过程中新增的。
手动移除\后能正常解析,是因为去掉转义符后,字符串就变成了合法的JSON数组格式,ObjectMapper可以正常解析。
正确解决方法(无需String.replace())
方法1:直接接收为目标Java类型
如果请求体本质是JSON数组,直接让Spring自动绑定到对应的Java类型,无需手动解析:
方式A:用List<Map<String, Object>>接收
@PostMapping(value = "/endpoint") public ResponseEntity<Object> resolveContent(@RequestBody List<Map<String, Object>> valueMap) { return new ResponseEntity<>(valueMap, HttpStatus.OK); }
方式B:自定义DTO类(更规范)
先定义对应JSON结构的DTO:
public class Attribute { private String name; private Integer degrees; // 生成getter、setter、无参/全参构造器 }
然后控制器直接接收:
@PostMapping(value = "/endpoint") public ResponseEntity<Object> resolveContent(@RequestBody List<Attribute> attributeList) { return new ResponseEntity<>(attributeList, HttpStatus.OK); }
方法2:修正Postman的发送格式
确保你在Postman中选择raw -> JSON格式后,直接发送纯JSON数组,不要加外层引号:
[{"name":"张三","degrees":90}]
而不是发送一个字符串形式的请求体(比如"[{\"name\":\"张三\",\"degrees\":90}]")。这样Spring就能正确识别并解析JSON结构。
内容的提问来源于stack exchange,提问作者gdonut98
相关产品推荐
相关产品推荐

