You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:45:33