首页 >  java代码 >  @RequestBody 接收数组、List 、对象参数

一、@RequestBody概述:

1、@RequestBody 主要用来接收前端传递给后端的 json 格式的数据的(请求体中的数据的),有一个属性 required,表示参数是否必须要传,默认为 true.

2、GET 方式无请求体,所以 @RequestBody 接收数据时,前端必须是 POST 方式进行提交,然后给页面的数据默认也是 json

3、同一个方法中,@RequestBody 与 @RequestParam() 可以同时使用,前者最多只能有一个,后者可以有多个,

4、@RequestBody 接收的是请求体里面的数据,@RequestParam 接收的是 key-value 里面的参数。

二、五类参数介绍:

1、接收单个string参数


/**
 * 单个参数时使用 String 类型传输,比如 int、long、flout 等等,都使用 String
 *
 */
@PostMapping("getName")
public String getName(@RequestBody String name) {
    return "名字:" + name;

}

//前端

$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type': 'application/json;charset=utf8'
    },
    type: "post",
    url: "xxx",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    data: JSON.stringify({"name": "小明"}),
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }

 

2、接收字符串数组

 /**
 * @param ids :接收页面单个:参数字符串数组。必须加 org.springframework.web.bind.annotation.RequestBody 注解。
 * 如果是整形数组,则换成  Integer[] ids 即可。
 * @return
 */
@PostMapping("getName")
public String getName(@RequestBody String[] ids) {

         System.out.println(ids);

    st ssreturn "";
}

var data = ["1a", "2a", "3a", "4a"];//如果后台接收的是整形数组,则 data 中使用整形即可,如:data = [80, 90, 100, 110,120];
$.ajax({
    headers: {
        'Content-Type': 'application/json'
    },
    type: "post",
    url: "xxx",
    data: JSON.stringify(data),
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

 

3、接收 List<Map<String,Object> 参数

   /**
     * 直接转换为 List<Map>
     *
     * @param mapList
     * @return
     * @throws JsonProcessingException
     */
    @PostMapping("getName")
    public String getName(@RequestBody List<Map<String,Object>> mapList) throws JsonProcessingException {
        System.out.println(mapList);
        ObjectMapper objectMapper = new ObjectMapper();
        String result = objectMapper.writeValueAsString(mapList);
        return result;
    }

//因为 ArrayList 底层也是数组,不难明白前端都传数组
var data = [{"name": "小明", "sex": “男”}, {"name": "小华", "sex": "女"}];
 
$.ajax({
    headers: {
        'Content-Type': 'application/json'
    },
    type: "post",
    url: "xxx",
    data: JSON.stringify(data),
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

4、接收对象

接收对象实体必须存在该对象,如果不确定对象,可以使用Map<Object,Object> 来接收一个map对象实体

/**
 * 需要存在实体类User, 包含name和sex2个属性
 * @param user
 * @return
 */
@PostMapping("getName")
public String getName(@RequestBody User user) {
    return "保存完成:" + user.toString();
}

var data = {"name": “小明”, "sex": "男"};
$.ajax({
    headers: {
        'Content-Type': 'application/json;charset=utf8'
    },
    type: "post",
    url: "xxx",
    data: JSON.stringify(data),
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
});

 

5、接收对象数组

跟接收对象一致,只不过使用数组集合的方式接收,不再举例。