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

React向Spring Boot传对象遇请求体缺失及参数格式问题求助

解决React向Spring Boot传递POST请求时"Required request body is missing"错误

问题现象

调用POST接口时持续收到如下错误:

Error: Required request body is missing: public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.String>> com.example.RegisterLogin.controller.RegisterController.registerHandler(java.lang.Object)

相关代码如下:

Spring Boot 后端代码

@PostMapping("/register")
public ResponseEntity<Map<String,String>> registerHandler(@RequestBody Object registerDTO) {
    log.info("User: {}",registerDTO);
    return ResponseEntity.ok(registerService.saveUser((RegisterDTO) registerDTO));
}

React 前端代码

export class RegisterService{
    save(user){
     console.log({ method: 'POST', headers: { accept: 'application/json', body: JSON.stringify({registerDTO: user})}})
   fetch('http://localhost:8080/api/auth/register', { method: 'POST', headers: { accept: 'application/json', body: JSON.stringify({registerDTO: user})}})
   .then(data => console.log(data.json())) // Parsing the data into a JavaScript object
   .then(json => alert(JSON.stringify(json))) 
   }
}

前端传递的请求体是嵌套格式:{registerDTO={name=w, dsurname=wd, ...}},但用Postman直接传递扁平对象{name=edfew, surname=feefewe, ...}时接口正常。

问题原因

  1. 请求体格式不匹配:后端期望直接接收包含用户属性的扁平对象,但前端把user包装在了registerDTO字段下,导致Spring无法将请求体映射到目标对象,进而识别为请求体缺失。
  2. 缺少必要请求头:前端请求未设置Content-Type: application/json,Spring无法正确解析JSON格式的请求体。
  3. 后端接收类型不规范:用Object接收请求体再强制转换为RegisterDTO,不仅不安全,也会增加Spring解析的复杂度。

解决方案

1. 修正前端请求代码

  • 去掉registerDTO包装,直接序列化user对象
  • 添加Content-Type: application/json请求头
  • 修正then链的异步处理(data.json()返回Promise,需要return才能传递到下一个then)

修改后的前端代码:

export class RegisterService{
    save(user){
        const requestOptions = {
            method: 'POST',
            headers: { 
                'Accept': 'application/json',
                'Content-Type': 'application/json' 
            },
            body: JSON.stringify(user)
        };
        console.log(requestOptions);
        fetch('http://localhost:8080/api/auth/register', requestOptions)
            .then(response => response.json())
            .then(json => alert(JSON.stringify(json)))
            .catch(error => console.error('请求错误:', error));
    }
}

2. 优化后端接收代码

直接用RegisterDTO作为请求体参数,避免强制类型转换,让Spring自动完成JSON映射:

@PostMapping("/register")
public ResponseEntity<Map<String,String>> registerHandler(@RequestBody RegisterDTO registerDTO) {
    log.info("User: {}", registerDTO);
    return ResponseEntity.ok(registerService.saveUser(registerDTO));
}

这样修改后,前端传递的扁平用户对象就能被后端正确解析,不会再出现请求体缺失的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:20:27