React传至Spring Boot的Payload为空/值为0问题排查求助
问题原因及解决方案
原因1:后端未用@RequestBody解析JSON参数
如果你的OfferController接收参数时没加@RequestBody注解,Spring会默认把参数当作URL查询参数/表单参数处理,而非解析请求体里的JSON,最终导致ObjHolder的属性只能拿到默认值(空字符串或0)。
正确Controller写法:
@PostMapping("/your-api-path") public ResponseEntity<?> processOffer(@RequestBody ObjHolder objHolder) { // 业务逻辑代码 return ResponseEntity.ok().build(); }
原因2:前后端字段名称不匹配
检查前端Payload的字段名和后端ObjHolder的属性名是否完全一致(注意大小写、驼峰/下划线差异):
- 比如前端传
offerId,但后端属性是offer_id且未加@JsonProperty("offerId")注解; - 或者后端属性是全小写的
offerid,前端是驼峰式的offerId,导致Jackson无法完成属性映射。
解决方式:
要么统一前后端字段命名,要么在后端属性上添加@JsonProperty指定对应前端字段名:
public class ObjHolder { @JsonProperty("offerId") private Integer offerId; @JsonProperty("userId") private Integer userId; // getter/setter方法 }
原因3:前端请求未设置正确的Content-Type
前端发送请求时如果没设置Content-Type: application/json,后端无法识别请求体为JSON格式,会导致解析失败。
React前端请求的正确写法:
// axios示例 axios.post('/api/offer', payload, { headers: { 'Content-Type': 'application/json' } }) // fetch示例 fetch('/api/offer', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(payload), })
原因4:后端实体类缺少必要的构造器或getter/setter
Jackson解析JSON时,要求实体类必须有无参构造器,同时属性需要对应的getter和setter方法,否则无法完成对象实例化和属性赋值。
正确的ObjHolder写法:
public class ObjHolder { private Integer offerId; private Integer userId; // 必须保留无参构造器 public ObjHolder() {} // getter和setter方法必须齐全 public Integer getOfferId() { return offerId; } public void setOfferId(Integer offerId) { this.offerId = offerId; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } }
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

