SpringBoot中@RequestBody参数为何始终接收为空?求解决方案
解决@RequestBody接收JSONObject为空的问题
改用Map或自定义POJO接收
Spring默认消息转换器对标准Java类型(如Map<String, Object>)或自定义POJO的支持更完善,替换参数类型即可正常接收:@PostMapping(value="/register") public Status registerSingleConnection(@RequestBody Map<String, Object> param){ System.out.println(param); // 可正常获取请求参数 // ...业务逻辑 }也可以定义匹配请求字段的POJO类,类型更安全:
public class RegisterParam { private String id; private String val; // 生成getter、setter方法 } @PostMapping(value="/register") public Status registerSingleConnection(@RequestBody RegisterParam param){ System.out.println(param.getId()); // ...业务逻辑 }使用Jackson的JsonNode替代JSONObject
若需要灵活处理JSON结构,推荐用Jackson原生的JsonNode,Spring默认支持无需额外配置:import com.fasterxml.jackson.databind.JsonNode; @PostMapping(value="/register") public Status registerSingleConnection(@RequestBody JsonNode param){ String id = param.get("id").asText(); String val = param.get("val").asText(); System.out.println(param); // ...业务逻辑 }配置第三方JSON库的消息转换器(若坚持用特定JSONObject)
如果使用的是阿里FastJSON的JSONObject,需要手动配置对应的消息转换器:- 先引入FastJSON依赖(以Maven为例):
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>- 添加Web配置类注册转换器:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); converters.add(0, converter); } }配置后Spring就能正确将请求体转换为FastJSON的
JSONObject。检查请求细节
- 确认请求头
Content-Type严格为application/json,Postman中需在Headers面板正确设置,避免拼写错误。 - 检查请求体JSON格式是否合法,确保引号、逗号等符号无语法错误。
- 确认请求头
另外,代码中System.out.printlin是拼写错误,需改为System.out.println,避免控制台输出异常。
内容的提问来源于stack exchange,提问作者leo0807
相关产品推荐
相关产品推荐

