controller 接收Post传递数据

1 传递字符串、基本类型

1、直接在方法形参中接收参数

直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。若"Content-Type"="application/x-www-form-urlencoded",可用post提交
url形式:http://localhost:8080/SSMDemo/demo/addUser1?username=lixiaoxi&password=111111 提交的参数需要和Controller方法中的入参名称一致。这种只可以将数据填在form表单中,使用Json字符串提交的时候会默认为null。

2、使用 @RequestBody String 形式接收:

@RequestBody 注解常用来处理 content-type 是 application/json 编码的内容,而不能用来处理 application/x-www-form-urlcoded 编码的内容。因此@RequestBody的时候应该使用Json形式传递:

			{
			    "name" : "天天"
			}

@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。我们可以通过如下实例看到:

    @PostMapping("/test")
    public Response TestBlackList(@RequestBody String blackRooms) {
        System.out.println(blackRooms.getClass());
        System.out.println(blackRooms);
        return Response.success();
    }

后台输出:

	class java.lang.String
	{
	    "blackRooms" : "1247,4545,5211"
	}

这时我们要拿到对应的数据,就必须对所得到的字符串进行解析。

3、使用 Map<String, Object>接收。Spring MVC会自动将传递的JSON字符串封装到map类型中,依据官网说明,我们需要创建自己的Entity接收参数。

    @PostMapping("/saveBlackRooms")
    public Response saveBlackList(@RequestBody Map<String, String> blackRooms) {
        String blackRoomList = blackRooms.get("blackRoomList");
        if (validateBlackList(blackRoomList)) {
            PkMatchGlobalConfig pkMatchGlobalConfig = new PkMatchGlobalConfig();
            pkMatchGlobalConfig.setBlackRoomList(blackRoomList);
            return blackListService.saveGlobalConfig(pkMatchGlobalConfig);
        }
        return Response.error(-1, "请输入正确的黑名单房间格式");
    }
2 传递 列表

前端传递列表数据需要请求的时候在前端指定dataType: “json”,contentType:“application/json”,在后台使用 @RequestBody注解可以直接解析成为相对应的列表或者实体类。

1、前端通过 Json 传递实体类 Config 列表:

[
	    	{"configKey": "blackRoomList","configValue": "1234"},
	    	{"configKey": "blackRoomList","configValue": "1234"},
	    	{"configKey": "blackRoomList","configValue": "1234"},
	    	{"configKey": "blackRoomList","configValue": "1234"}
]

2、传递的实体类中包含列表, 如下面实体类包含 List<App_passenger> 列表:


public class App_order implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     *联系人姓名
     */
    @TableField("buyer_name")
    private String buyer_name;
 
    /**
     * 实付电话
     */
    @TableField("buyer_mobile")
    private String buyer_mobile;
    
    /**
     * 联系人邮箱
     */
    @TableField("buyer_email")
    private String buyer_email;

    @TableField(exist=false)
    private List<App_passenger> passengers;
}

提交格式:

{
	"buyer_email": "[email protected]",
        "buyer_name": "lzs",
	"buyer_mobile": "123456789",
	"passengers": [{
		"create_time": "2019-04-24 14:56:30",
		"passport": "b1234888",
		"user_id": 1,
		"mobile": "17888888888",
		"name": "李xx",
		"id": 1,
		"identity_card": "370403xxxx8888"
	}, {
		"create_time": "2019-04-24 14:56:30",
		"passport": "b1234222",
		"user_id": 1,
		"mobile": "17222222222",
		"name": "徐xx",
		"id": 3,
		"identity_card": "370403xxxx3333"
	}, {
		"create_time": "2019-04-24 14:56:30",
		"passport": "b1234111",
		"user_id": 1,
		"mobile": "17111111111",
		"name": "张xx",
		"id": 2,
		"identity_card": "370403xxxx2222"
	}]
}
3 接受实体类

前端传递 实体类 Config,与上面类似,使用@RequestBody注解解析成为相对应的实体类。

			{
			    "id": 0,
			    "name": 1,
			    "sex": 64,
			    "mothor": 62,
			    "father": 62
			}

参考文章

@RequestBody的使用

简单看看@RequestBody注解原理

Spring MVC源码---- @RequestBody和@ResponseBody原理解析

json对象、json字符串的区别和相互转换

四种常见的 POST 提交数据方式

pringBoot - 获取POST请求参数详解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章