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

Spring Data JPA报Required request body is missing的原因与解决

问题分析与解决方案

一、先解决"Required request body is missing"错误

这个错误并非由@JsonProperty(access = READ_ONLY)或@JsonIgnore直接导致,常见修复方向如下:

  • 检查请求头配置
    确保请求的Content-Type头设置为application/json,否则Spring无法识别JSON格式的请求体,会判定请求体缺失。
  • 确认实体类Setter方法完整
    检查TableA的name字段是否存在对应的Setter方法。Jackson反序列化依赖Setter为字段赋值,若name无Setter,会导致JSON解析失败,间接触发请求体缺失的错误提示。
  • 清理冗余代码
    控制器中这段代码完全无效,建议删除:
    TableA tableA = new TableA();
    tableA = newTableA;
    
    简化后的控制器方法:
    @Transactional(rollbackFor = Exception.class)
    @PostMapping(value="/CreateTableA") 
    public void createTableA(@RequestBody TableA newTableA){
        tableARepository.save(newTableA);
    }
    

二、如何让Id字段跳过反序列化

你使用的@JsonProperty(access = JsonProperty.Access.READ_ONLY)是正确方案,它的作用是:

  • 序列化(返回前端数据时)包含该字段
  • 反序列化(接收前端请求时)忽略该字段,不会尝试从请求体读取Id值

若注解未生效,可排查以下几点:

  1. 确认Jackson依赖版本正常(Spring Boot默认集成的版本无问题)
  2. 避免给Id字段添加冲突的Jackson注解
  3. 确保Id字段的Setter方法存在(即使反序列化忽略,Setter不影响注解生效)

另外,也可通过@JsonIgnore配合@JsonProperty实现相同效果:

@JsonIgnore
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, name="Id")
private BigInteger id;

@JsonProperty("id")
public BigInteger getId() {
    return id;
}

此写法同样实现“序列化暴露Id,反序列化忽略Id”的效果。

三、是否必须创建专用的API请求类?

不是必须,但非常推荐。

推荐分离的核心原因:

  • 职责单一:JPA实体是数据库映射模型,API请求类是接口交互模型,两者职责边界清晰。后续修改实体的数据库相关字段(如创建时间)不会影响API,API新增校验规则也不会干扰数据库映射。
  • 避免序列化/反序列化冲突:像当前遇到的Id字段问题,本质是实体类同时适配数据库规则和API规则导致的冲突,分离后可彻底避免此类问题。
  • 安全性:防止实体类中的敏感字段被意外暴露或篡改。

示例请求类(DTO):

public class TableARequest {
    @NotBlank(message = "名称不能为空") // 可添加API专属校验规则
    private String name;

    // Getter、Setter方法
}

对应控制器修改:

@Transactional(rollbackFor = Exception.class)
@PostMapping(value="/CreateTableA") 
public void createTableA(@RequestBody TableARequest request){
    TableA tableA = new TableA();
    tableA.setName(request.getName());
    tableARepository.save(tableA);
}

四、优先解决错误还是采用设计模式?

建议先快速修复错误让功能正常运行,再重构代码采用DTO模式从根源规避问题:

  1. 先解决错误:保证业务功能可用,不影响开发进度;
  2. 再重构优化:从架构层面明确模型职责,避免后续出现类似的序列化冲突、职责混淆等问题,提升代码可维护性。

内容的提问来源于stack exchange,提问作者TSSK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:20:33