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

Spring @RestController双@RequestBody入参报错,请求体缺失问题排查

问题根源与解决方案

你的问题不是JSON输入的问题,而是接口方法的参数定义违反了Spring的规则:一个HTTP POST请求只能有一个请求体(Request Body),因此Spring不允许在同一个接口方法中使用多个@RequestBody注解。

当你在方法foo中声明两个@RequestBody参数时,Spring会尝试为第一个参数读取整个请求体,此时请求体的数据流已经被消费完毕,第二个参数就没有可读取的请求体了,这就是你看到HttpMessageNotReadableException: Required request body is missing错误的原因。

正确的解决方法

方案1:创建统一的请求DTO类(推荐)

定义一个包含ClassA和ClassB字段的DTO类,作为接口的唯一请求体参数:

public class ResourceRequest {
    private ClassA objA;
    private ClassB objB;

    // 必须提供getter和setter方法,或者使用Lombok的@Data注解自动生成
    public ClassA getObjA() {
        return objA;
    }

    public void setObjA(ClassA objA) {
        this.objA = objA;
    }

    public ClassB getObjB() {
        return objB;
    }

    public void setObjB(ClassB objB) {
        this.objB = objB;
    }
}

然后修改Controller的方法:

@RestController
public class MyController {
    @PostMapping(value="/resource")
    public void foo(@RequestBody ResourceRequest request){
        // 从request中获取objA和objB
        ClassA objA = request.getObjA();
        ClassB objB = request.getObjB();
        // do stuff
    } 
}

你的原有JSON输入完全匹配这个DTO结构,不需要做任何修改。

方案2:用Map接收请求体(不推荐,类型不安全)

如果不想创建DTO类,可以用Map<String, Object>接收整个请求体,再手动转换为目标对象:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;

@RestController
public class MyController {
    private final ObjectMapper objectMapper = new ObjectMapper();

    @PostMapping(value="/resource")
    public void foo(@RequestBody Map<String, Object> requestMap) throws Exception {
        ClassA objA = objectMapper.convertValue(requestMap.get("objA"), ClassA.class);
        ClassB objB = objectMapper.convertValue(requestMap.get("objB"), ClassB.class);
        // do stuff
    } 
}

这种方式不需要修改JSON,但失去了编译时类型检查,容易出现转换错误,仅适用于临时调试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:20:53