在 Java 或 Spring 中将列表传递给控制器​​?

Passsing List to Controller in Java or Spring?

我有以下方法,我需要将 List<UUID> 传递给此 Controller 方法。

@GetMapping("/product/{productUuidList}")
public ResponseEntity<ApiResponse<List<ProductDTO>>> getProductList(
        @RequestParam List<UUID> productUuidList) {

        // code omitted
}

如果我通过分隔逗号传递列表参数,就可以了。但是,我想将这些列表参数作为 Json 数组传递。当我尝试如下所示在 Postman 中传递 uuid 参数时,出现 "productUuidList parameter is missing" 错误。

{ 
    "productUuidList": ["c849bcbb-c26c-4299-9ca4-dcde56830f5f", "398ec0f8-86c8-400a-93cb-caf47c1ac92d"]
}

那么,我应该如何在不将 @GetMapping 更改为 @PostMapping 的情况下正确地将 uuid 数组传递给此控制器方法?

这样不行。您在这里发送一个 JSON 对象,看起来像这样 java POJO :

public class MyUUIDWrapper{

    private List<UUID> productUuidList;
    // GETTERS/SETTERS  

}

因此 Spring 期望在 RequestBody

中检索 MyUUIDWrapper 对象

如果您像这样更改代码,它应该可以工作:

public ResponseEntity<ApiResponse<List<ProductDTO>>> getProductList(
    @RequestParam MyUUIDWrapper uuids) {

注意:如果您在反序列化 UUID 时遇到问题(我以前从未这样做过),请将 List 更改为 List。不是最聪明或最漂亮的解决方案,但您稍后仍可以在控制器中转换它们 ;)