【问题标题】:Passsing List to Controller in Java or Spring?在 Java 或 Spring 中将列表传递给控制器​​?
【发布时间】:2021-10-07 10:08:10
【问题描述】:

我有以下方法,需要将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 数组传递给这个Controller 方法?

【问题讨论】:

  • 没有其他人从不将 List 传递给 Java 中的端点吗?
  • 您可以将 productUuidList 转换为查询参数并发送 id 列表。参考建议:stackoverflow.com/questions/11621477/…
  • 是的,例如。根据 UI 上的多项选择(如复选框)从服务中获取数据。
  • 你把@RequestParam@RequestBody混为一谈了。
  • @MSDev 感谢您的帮助,但该页面上没有任何有用的东西。上述这种情况有什么解决办法吗?

标签: java spring list spring-boot controller


【解决方案1】:

它不会像这样工作。在这里,您正在发送一个类似于 java POJO 的 JSON 对象:

public class MyUUIDWrapper{

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

}

所以 Spring 期望在 RequestBody 中检索一个 MyUUIDWrapper 对象

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

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

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

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2016-08-22
    相关资源
    最近更新 更多