在使用 Spring Boot 开发 RESTful API 时,经常会遇到 Required request body is missing 的错误。这个错误通常是由于在后端的 API 接口方法中,使用了多个 @RequestBody 注解,而 @RequestBody 注解只能用于一个参数上。

例如,以下代码中,saveBatch 方法使用了两个 @RequestBody 注解来接收两个参数:

public Result<?> saveBatch(@RequestBody YlYncf yncf,
                               @RequestBody List<YlYncfMx> yncfMxes) {
    // 处理业务逻辑
}

这种情况下,Spring Boot 无法解析请求体中的数据,从而导致 Required request body is missing 的错误。

解决方法:

将多个参数封装为一个对象,然后使用一个 @RequestBody 注解进行接收。

例如:

public class YlYncfParams {
    private YlYncf yncf;
    private List<YlYncfMx> yncfMxes;
    // getter and setter
}

public Result<?> saveBatch(@RequestBody YlYncfParams params) {
    // 处理业务逻辑
}

同时,需要修改前端代码以传递一个对象参数:

export const saveBatchUnchecked = (params) => defHttp.post({ url: Api.saveBatchUnchecked, data: params });

setup() {
  async function submitAll() {
    let params = {
      yncf: yncf.value,
      yncfMxes: cfMx.value,
    };
    cfId.value = await saveBatchUnchecked({ params });
    refresh();
  }
}

修改后的代码:

public class YlYncfParams {
    private YlYncf yncf;
    private List<YlYncfMx> yncfMxes;
    // getter and setter
}

public Result<?> saveBatch(@RequestBody YlYncfParams params) {
    // 处理业务逻辑
}
export const saveBatchUnchecked = (params) => defHttp.post({ url: Api.saveBatchUnchecked, data: params });

setup() {
  async function submitAll() {
    let params = {
      yncf: yncf.value,
      yncfMxes: cfMx.value,
    };
    cfId.value = await saveBatchUnchecked({ params });
    refresh();
  }
}

通过以上修改,就能正确地发送请求,并且不会再报 Required request body is missing 的错误了。

Spring Boot @RequestBody 注解使用错误导致请求体缺失的解决方案

原文地址: https://www.cveoy.top/t/topic/qx6d 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录