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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:03:14