使用Postman发送Raw JSON时接口返回值为null的技术求助
解决Postman Raw JSON传参无法获取值的问题
嘿,我之前也碰到过完全一样的情况!这其实是Spring对不同请求参数来源的处理逻辑导致的,咱们一步步来解决:
问题根源
你的接口方法里的String name参数,Spring默认会从URL查询参数或者**表单参数(form-data/x-www-form-urlencoded)**里取值。但当你用Raw JSON传参时,参数是放在HTTP请求体的JSON结构里的,Spring没法自动把请求体里的JSON值绑定到单个String参数上,所以就返回了null。
两种可行的解决方案
方案1:用实体类接收JSON请求体
创建一个对应JSON结构的实体类,通过@RequestBody注解绑定请求体的JSON数据:
@RestController public class HeroController { // 用@PostMapping简化RequestMapping的写法 @PostMapping("/displayHero") public Map<String, String> displayInfo(@RequestBody Hero hero){ Map<String, String> imap = new LinkedHashMap<>(); imap.put("hero", hero.getName()); return imap; } // 定义内部实体类(也可以单独写一个类文件) static class Hero { private String name; // Spring需要无参构造函数 public Hero() {} // 必须提供getter和setter方法,否则无法赋值 public String getName() { return name; } public void setName(String name) { this.name = name; } } }
Postman配置:
- 选择
Raw格式,类型选JSON - 请求体填写:
{"name": "wolverine"} - 确保
Content-Type请求头为application/json; charset=UTF-8
方案2:用Map直接接收JSON(无需实体类)
如果不想创建实体类,可以直接用Map来接收请求体的JSON数据:
@RestController public class HeroController { @PostMapping("/displayHero") public Map<String, String> displayInfo(@RequestBody Map<String, String> params){ String name = params.get("name"); Map<String, String> imap = new LinkedHashMap<>(); imap.put("hero", name); return imap; } }
Postman的配置和方案1完全一样,传{"name": "wolverine"}就能正常拿到值啦。
特殊场景:仅传单个字符串JSON
如果你只想传单个字符串(比如直接传"wolverine"而不是JSON对象),可以直接用@RequestBody String name:
@PostMapping("/displayHero") public Map<String, String> displayInfo(@RequestBody String name){ Map<String, String> imap = new LinkedHashMap<>(); imap.put("hero", name); return imap; }
这时候Postman的请求体要写"wolverine"(带双引号),Content-Type保持application/json即可。
内容的提问来源于stack exchange,提问作者Marky
相关产品推荐
相关产品推荐

