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

React向Spring Boot后端发POST请求遇RequestBody缺失错误求助

解决React Axios POST请求到Spring后端时的"Required request body is missing"错误

嘿,我来帮你捋清楚这个问题!你遇到的这个错误,核心原因是Spring里@RequestBody注解的用法理解错了,咱们一步步来解决:

问题根源

你的后端控制器方法getVistaConnection里,给四个参数都加了@RequestBody注解——这可是Spring里的大忌!@RequestBody的作用是把**整个HTTP请求体(也就是你前端Axios发的那个JSON对象)**绑定到一个Java对象上,一个请求方法里只能用一次这个注解。你现在让Spring把同一个请求体拆成四个独立的String参数,它根本做不到,所以就会抛出"Required request body is missing"的错误。

解决方案

咱们需要用一个DTO(数据传输对象)来封装前端传来的所有参数,让Spring能正确解析请求体:

1. 创建一个DTO类

先新建一个专门用来接收请求参数的类,把你需要的四个字段都放进去:

package com.va.med.dashboard.models; // 根据你的项目包结构调整路径

public class VistaConnectionRequest {
    // 和前端传来的JSON字段名一一对应
    private String ipString;
    private String portString;
    private String accessPin;
    private String verifyPin;

    // 必须要有无参构造函数,Spring需要它来实例化对象
    public VistaConnectionRequest() {}

    // Getter和Setter方法,Spring需要通过这些方法注入属性值
    public String getIpString() {
        return ipString;
    }

    public void setIpString(String ipString) {
        this.ipString = ipString;
    }

    public String getPortString() {
        return portString;
    }

    public void setPortString(String portString) {
        this.portString = portString;
    }

    public String getAccessPin() {
        return accessPin;
    }

    public void setAccessPin(String accessPin) {
        this.accessPin = accessPin;
    }

    public String getVerifyPin() {
        return verifyPin;
    }

    public void setVerifyPin(String verifyPin) {
        this.verifyPin = verifyPin;
    }
}

2. 修改控制器方法

把原来的四个@RequestBody参数换成咱们刚创建的DTO类,只保留一个@RequestBody注解:

// 可以用更简洁的@PostMapping代替@RequestMapping(method = RequestMethod.POST)
@PostMapping(value = "/vista", produces = "application/json")
@ResponseStatus(value = HttpStatus.ACCEPTED)
public String getVistaConnection(@RequestBody VistaConnectionRequest request) {
    // 从DTO对象里取出各个参数
    System.out.println(request.getIpString());
    System.out.println(request.getPortString());
    System.out.println(request.getAccessPin());
    System.out.println(request.getVerifyPin());
    
    vistaService.connect(request.getIpString(), request.getPortString(), request.getAccessPin(), request.getVerifyPin());
    
    return vistaService.connected ? "Connected" : "Not Connected";
}

3. 前端代码不用改!

你写的Axios请求完全没问题,它发送的是一个包含四个字段的JSON对象,和咱们的DTO结构完美匹配,所以前端不需要做任何调整。

额外小建议

如果你的项目用了Spring Boot,推荐用Lombok来简化DTO类的代码——只需要添加Lombok依赖,然后用@Data注解,就能自动生成Getter、Setter、构造函数等方法,DTO代码会变得非常简洁:

package com.va.med.dashboard.models;

import lombok.Data;

@Data
public class VistaConnectionRequest {
    private String ipString;
    private String portString;
    private String accessPin;
    private String verifyPin;
}

这样调整之后,Spring就能正确解析你的请求体,那个错误就会消失啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:48