有没有办法在REST调用的同一参数中接收对象或列表?

时间:2019-06-21 11:17:07

标签: java json spring list spring-restcontroller

在Java中,您可以在函数中添加3个点,以表示它可以接收一个或多个对象,而我正在尝试通过rest调用实现这一点

@PutMapping(value = FIELD_SAVE_URI)
    @Secured(CdsPermissionDefinition.CDS_MODIFY)
    public ResponseEntity<DefaultFieldDto> saveField(@RequestBody @NotNull DefaultFieldDto... fields){
        //TODO impl
        return ResponseEntity.ok(new DefaultFieldDto());
    }

现在,如果我不发送列表[],服务器会给我一个错误,但是我希望该选项可以在同一参数中接收对象{}或列表[]

void test(){
    a();
    a(new DefaultFieldDto());
    a(new DefaultFieldDto(), new DefaultFieldDto(), new DefaultFieldDto());
}


private void a(DefaultFieldDto... fields){
    //Do something
}

从REST服务的角度来看,这基本上就是我要实现的

1 个答案:

答案 0 :(得分:1)

这基本上是您想要的错误设计。根据REST标准,PUT应该只接受JSON,而不接受List。

但是,如果您坚持使用列表,则应仅在请求正文中支持列表。对于发送对象{}的情况,将其作为一个对象[{}]的数组发送。