SpringBoot 开发案例之参数传递的正确姿势 SpringBoot 开发案例之参数传递的正确姿势 (2)

后端实现:

/** * 数组 * https://blog.52itstyle.vip */ @PostMapping("array") public Result array(@RequestParam(value = "ids[]") Integer[] ids) { logger.info("数据{}", Arrays.asList(ids)); //业务逻辑 return Result.ok(); } 传递集合

前端代码与传递数组保持一致。

后端实现:

/** * 集合 * https://blog.52itstyle.vip */ @PostMapping("array") public Result array(@RequestParam(value = "ids[]") List<Integer> ids) { logger.info("数据{}", ids.toString()); //业务逻辑 return Result.ok(); } 传递集合实体对象

比如,后端想接收一个实体对象集合 List<SysUser>

前端代码:

var list = []; list.push({ "username": "小柒2012", "mobile": "17762288888" }); list.push({ "username": "小柒2013", "mobile": "17762289999" }); $.ajax({ url: "/sys/listUser", data: JSON.stringify(list), type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });

后端代码:

/** * 爪哇笔记 * https://blog.52itstyle.vip */ @PostMapping("listUser") public Result listUser(@RequestBody List<SysUser> list) { logger.info("数据{}", list.size()); list.forEach(user->{ //输出实体对象 System.out.println(user.getUsername()); }); //业务逻辑 return Result.ok(); } 传递集合实体对象一对多

比如,一个用户有多个角色 List<SysRole> roleList

前端代码:

var roleList = []; roleList.push({ "roleSign": "admin", "roleName": "管理员" }); roleList.push({ "roleSign": "user", "roleName": "普通用户" }); var list = []; var user = { "username": "小柒2012", "mobile": "17762288888" }; user.roleList = roleList; list.push(user); $.ajax({ url: "/sys/listUserRole", data: JSON.stringify(list), type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });

后端实现:

/** * 爪哇笔记 * https://blog.52itstyle.vip */ @PostMapping("listUserRole") public Result listUserRole(@RequestBody List<SysUser> list) { logger.info("数据{}", list.size()); list.forEach(user->{ List<SysRole> roleList = user.getRoleList(); roleList.forEach(role->{ System.out.println(role.getRoleName()); }); }); return Result.ok(); } 炒鸡复杂

传输对象有实体,有集合,有各种类型的数据,这时候最简单的方式就是传递 Key-Value 结构的 JSON 字符串,后台 Map 类型接收,然后通过FastJson的 JSON.parseObject() 和 JSON.parseArray() 方法转化为对应的实体或者集合。

String user = parseMap.get("user").toString(); SysUser sysUser = JSON.parseObject(user,SysUser.class); String contractClause = parseMap.get("rules").toString(); List<Rule> ruleList = JSON.parseArray(contractClause,Rule.class); RESTful 风格

比如,访问某篇文章:

/** * 爪哇笔记 * https://blog.52itstyle.vip */ @GetMapping("article/{id}") public void article(@PathVariable("id") String id) { logger.info("文章{}",id); //业务逻辑 } 原则

记住一下几点:

@RequestBody注解,必须与 contentType 类型application/json配合使用。

@RequestParam注解,必须与 contentType 类型application/x-www-form-urlencoded配合使用,其为默认类型。

JSON.stringify() 把对象类型转换为字符串类型,一般配合 @RequestBody注解和contentType 类型application/json使用。

扩展

在以上只涉及了两种 contentType 类型,其实还有两种常见的类型:

multipart/form-data

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjdzg.html