Spring Boot删除映射数组作为参数

时间:2019-07-04 12:10:04

标签: javascript java reactjs spring-boot

我有以下控制器方法来获取ID数组,然后将其删除,但是我从react发送的内容在这里没有被捕获。

@DeleteMapping({"delete-user"})
public GenericResponse deleteUser(@RequestBody String[] ids, Errors errors) {
    if (errors.hasErrors())
        throw new ParseException();
    return userService.delete(Arrays.asList(ids));
}

反应请求代码段

yield call(userDeleteService, payload.ids)

什么是有效载荷

callback: undefined
ids: Array(1)
    0: "08ddc3f3-9df3-463f-8d95-25a4633f24b7"
length: 1

这是从React端发送的请求。

http://localhost:8080/user/delete-user?0=08ddc3f3-9df3-463f-8d95-25a4633f24b7&1=11036b08-8daa-44ef-a557-9723f20b8911&

1 个答案:

答案 0 :(得分:1)

让我们稍微修改一下您的端点。

您要基于ID列表删除用户:

  1. 您正在使用DELETE动词公开端点,该动词是 完美!
  2. 作为优质REST practices的一部分,您应该在端点定义中使用名词而不是动词。因此,在/users处公开DELETE端点要比在/users/delete-user中公开DELETE端点要好。
  3. 确保从头开始,您实际上是在使用DELETE动词,而不是GET,POST或其他任何东西。
  4. 似乎您是通过两种不同的方法发送ID的:主体和查询参数,选择一种!我会选择正文,因为您想要的结果是一次发送多个对象。

要检索ID列表,您应该将数组包装在一个类中:

public class DeleteUserDTO {
  private List<String> ids;

  // getter  + setter
}

然后将此对象用作请求正文:

@DeleteMapping
public GenericResponse deleteUser(@RequestBody DeleteUserDTO dto, Errors errors) {
    if (errors.hasErrors())
        throw new ParseException();
    return userService.delete(dto.getIds());
}