我看不出代码有什么问题;我想使用一个PUT方法,但当我这样做时,API返回的响应是:

"errors": {
    "$": [
        "The JSON value could not be converted to MTE.API.Request.Supplier.PutSupplierRequest. Path: $ | LineNumber: 0 | BytePositionInLine: 2."
    ],
    "request": [
        "The request field is required."
    ]
}

我想要实现的是,通过可视化表格中的一系列数据,我可以编辑来自模型的信息.我认为问题就在那里,但我不知道为什么.其他方法运行良好(GET、POST和DELETE).

I structured the request like this:
For more context: I have a const to define the url: http://api.com/api/suplier

 actualizarProveedor: async (proveedorData) => {
    try {
      const response = await axios.put(`${API_BASE_URL}`, proveedorData, {
        headers: {
          'Content-Type': 'application/json',
        },
      });
  
      console.log('Actualizar Proveedor:', response.data);
      return response.data;
    } catch (error) {
      console.error('Error en actualizarProveedor:', error);
      throw error;
    }
  },

这就是数据如何发送到请求:

const handleGuardarEdicion = async (editedProveedor) => {
    try {
      await apiCompras.actualizarProveedor(editedProveedor.id, {
        id: editedProveedor.id,
        name: editedProveedor.nombre,
        ruccode: editedProveedor.numeroRUC,
      });
  
      console.log('Proveedor actualizado exitosamente:', editedProveedor);
  
      cargarProveedores();
    } catch (error) {
      console.error('Error al actualizar proveedor:', error);
    }
  };

最后,这是如何构建模型的:

<Dialog open={modalOpen} onClose={handleCloseModal}>
  <DialogTitle>Editar Proveedor</DialogTitle>
  <DialogContent>
    <form>
      <TextField
        label="Nombre"
        variant="outlined"
        margin="normal"
        fullWidth
        required
        value={selectedProveedor ? selectedProveedor.name : ''}
        onChange={(e) => handleEditFieldChange('name', e.target.value)}
      />
      <TextField
        label="Código RUC"
        variant="outlined"
        margin="normal"
        fullWidth
        required
        value={selectedProveedor ? selectedProveedor.ruccode : ''}
        onChange={(e) => handleEditFieldChange('ruccode', e.target.value)}
      />
    </form>
  </DialogContent>
  <DialogActions>
    <Button onClick={() => { handleGuardarEdicion(selectedProveedor); handleCloseModal(); }} color="primary">
      Cerrar
    </Button>
  </DialogActions>
</Dialog>

我进行了更改,将错误消息更改为以下内容:

"errors": {
    "Id": [
        "The field Id must be between 1 and 2147483647."
    ],
    "Name": [
        "The Name field is required."
    ],
    "RUCCODE": [
        "The RUCCODE field is required."
    ]
}

将此内容添加到请求中:

try {
  const requestData = {
    request: {
      id: supplierData.id,
      name: supplierData.name,
      ruccode: supplierData.ruccode,
    }
  };

推荐答案

你向actualizarProveedor()发送了两个参数,但它的签名只接受一个.我假设第二个参数中的对象是您打算发送的数据,因此它被忽略了.

要解决该问题,您可以修改调用以仅传递对象:

await apiCompras.actualizarProveedor({
  id: editedProveedor.id,
  name: editedProveedor.nombre,
  ruccode: editedProveedor.numeroRUC,
});

Javascript相关问答推荐

获取加载失败:获取[.]添加时try 将文档添加到Firerestore,Nuxt 3

将状态向下传递给映射的子元素

当运行d3示例代码时,没有显示任何内容

为什么promise对js中的错误有一个奇怪的优先级?

MathJax可以导入本地HTML文档使用的JS文件吗?

在286之后恢复轮询

实现JS代码更改CSS元素

PDF工具包阿拉伯字体的反转数字

覆盖加载器页面避免对页面上的元素进行操作

为什么客户端没有收到来自服务器的响应消息?

使用auth.js保护API路由的Next.JS,FETCH()不起作用

Reaction Redux&Quot;在派单错误中检测到状态Mutations

如何在Press上重新启动EXPO-AV视频?

在不扭曲纹理的情况下在顶点着色器中旋转UV

React Refs不与高阶组件(HOC)中的动态生成组件一起工作

本地损坏的Java脚本

如何在尚未创建的鼠标悬停事件上访问和着色div?

在没有任何悬停或其他触发的情况下连续交换图像

Refine.dev从不同的表取多条记录

找不到处于状态的联系人