解读SpringBoot接收List参数问题(POST请求方式)

  • Post category:http

下面我将详细讲解“解读SpringBoot接收List参数问题(POST请求方式)”的完整攻略。

1. 问题背景

在SpringBoot中,如果需要接收一个POST请求参数为List类型的Bean,则需要注意以下问题:
– 对象中需要有一个空参的构造器,否则使用@RequestBody注解时会报错
– 接收参数需要使用@RequestBody注解
– 发送POST请求时需要设置Content-Type为application/json;charset=UTF-8

接下来,我们通过两个示例具体解释这些问题。

2. 示例说明

2.1 接收参数为List类型的Bean

假设我们需要接收一个POST请求参数为List类型的Bean,其中Bean的定义如下:

public class User {
    private Integer id;
    private String name;
    // 省略getter/setter方法
}

则定义接口如下:

@PostMapping("/user/save")
public void saveUserList(@RequestBody List<User> userList) {
    // do something
}

注意,在接口方法上需要添加@RequestBody注解,表明参数是从请求体中获取的。同时,用户类中也需要有一个空参构造器。

发送POST请求时,我们需要设置Content-Type为application/json;charset=UTF-8,例如使用curl命令发送请求:

curl -H 'Content-Type: application/json;charset=UTF-8' -d '
[
    {"id":1, "name":"张三"},
    {"id":2, "name":"李四"}
]' 'http://localhost:8080/user/save'

其中-d参数表示请求体的数据。

2.2 接收参数为一个List和一个对象

假设我们需要接收一个POST请求参数为一个List和一个对象,对象定义如下:

public class Order {
    private Integer id;
    private List<String> items;
    // 省略getter/setter方法
}

则定义接口如下:

@PostMapping("/order/save")
public void saveOrder(@RequestBody List<String> codeList, @RequestBody Order order) {
    // do something
}

需要注意的是,在一个接口方法中使用多个@RequestBody注解是不允许的。这里我们通过两个参数来接收数据。

发送POST请求时,我们同样需要设置Content-Type为application/json;charset=UTF-8,例如使用curl命令发送请求:

curl -H 'Content-Type: application/json;charset=UTF-8' -d '
["A123", "B345"]

{"id":1, "items":["item1", "item2"]}
' 'http://localhost:8080/order/save'

其中-d参数表示请求体的数据。

3. 总结

以上就是“解读SpringBoot接收List参数问题(POST请求方式)”的完整攻略。在接收参数为List类型的Bean时,需要注意对象中需要有一个空参的构造器,接收参数需要使用@RequestBody注解,并且发送POST请求时需要设置Content-Type为application/json;charset=UTF-8。