文章目录
- [1. 获取请求参数](#1. 获取请求参数)
- [2. 响应数据](#2. 响应数据)
- [3. REST风格](#3. REST风格)
1. 获取请求参数
-
简单类型参数:设置方法形参的名称与请求参数名称相同,SpringMVC会自动将请求参数复制给相应的方法形参。
java//请求路径:http://localhost:8080/simpleParam?name=Tom&age=20 @RestController public class RequestController { @RequestMapping("/simpleParam") public String simpleParam(String name , Integer age ){ System.out.println(username + " : " + age); return "OK"; } }
当方法形参名称与请求参数名称不一致时可以使用
@RequestParam
注解完成映射。java//请求路径:http://localhost:8080/simpleParam?name=Tom&age=20 @RestController public class RequestController { @RequestMapping("/simpleParam") public String simpleParam(String @RequestParam(name) username , Integer age ){ System.out.println(username + " : " + age); return "OK"; } }
@RequestParam
注解共包含四个属性如下所示:- name:请求中的参数名,与value等价。
- value:请求中的参数名,与name等价。
- required:请求参数是否必须,默认为true。
- defaultValue:请求参数的默认值,该如果配置该属性会使required属性自动设置为false。
-
实体参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数。
如果是嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。
java@Data public class User { private String name; private Integer age; private Address address; } @Data public class Address { private String province; private String city; }
java//请求路径:http://localhost:8080/simplePojo?name=Tom&age=20&address.province=FuJian&address.city=Fuzhou @RestController public class RequestController { @RequestMapping("/simplePojo") public String simplePojo(User user){ System.out.println("user:" + user); return "OK"; } }
-
数据参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数。
java//请求路径:http://localhost:8080/arrayParam?hobby=basketball&hobby=football&hobby=eat @RestController public class RequestController { @RequestMapping("/arrayParam") public String arrayParam(String[] hobbby){ System.out.println(Arrays.toString(hobby)); return "OK"; } }
-
集合参数:求参数名与形参集合对象名相同且请求参数为多个,
@RequestParam
绑定参数关系。java//请求路径:http://localhost:8080/collectionParam?hobby=basketball,football,eat @RestController public class RequestController { @RequestMapping("/collectionParam") public String collectionParam(@RequestParam List<String> hobbby){ System.out.println(hobby); return "OK"; } }
-
Json参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用
@RequestBody
标识。java@RestController public class RequestController { @RequestMapping("/jsonParam") public String jsonParam(@RequestBody User user){ System.out.println(user); return "OK"; } }
-
日期参数:
@DateTimeFormat
注解的pattern属性中指定了哪种日期格式,前端的日期参数就必须按照指定的格式传递。后端controller方法中,需要使用Date类型或LocalDateTime类型,来封装传递的参数。
java//请求路径:http://localhost:8080/dateParam?updateTime=2020-10-10 10:10:10 @RestController public class RequestController { @RequestMapping("/dateParam") public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){ System.out.println(updateTime); return "OK"; } }
-
路径参数:使用{...}来标识该路径参数,需要使用
@PathVariable
获取路径参数。java//请求路径:http://localhost:8080/path/1/cxk @RestController public class RequestController { //路径参数 @RequestMapping("/path/{id}/{name}") public String pathParam2(@PathVariable Integer id, @PathVariable String name){ System.out.println(id+ " : " +name); return "OK"; } }
2. 响应数据
名称 | @ResponseBody |
---|---|
类型 | 方法\类注解 |
位置 | SpringMVC控制器方法定义上方和控制类上 |
作用 | 设置当前控制器返回值作为响应体, 写在类上,该类的所有方法都有该注解功能 |
相关属性 | pattern:指定日期时间格式字符串 |
说明:
- 该注解可以写在类上或者方法上
- 写在类上就是该类下的所有方法都有
@ReponseBody
功能:@RestController
=@Controller
+@ResponseBody
。 - 当方法上有
@ReponseBody
注解后- 方法的返回值为字符串,会将其作为文本内容直接响应给前端
- 方法的返回值为对象,会将对象转换成JSON响应给前端
3. REST风格
-
REST(Representational State Transfer)表现形式状态转换 ,它是一种软件架构风格,它充分利用HTTP协议的特性,为我们规定了一套统一的资源获取方式,以实现不同终端之间(客户端与服务端)的数据访问与交互。
-
REST风格:根据REST风格对资源进行访问称为RESTful,通过URL定位要操作的资源,通过HTTP动词(请求方式)来描述具体的操作。在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。
- GET : 查询
- POST :新增
- PUT :修改
- DELETE :删除
-
下述示例代码分别展示采用REST风格对用户资源进行增删改查。
java@RestController("/users") public class UserController { @Autowired privite UserService userService; //1.根据id查询某个用户 @GetMapping("/{id}") public ResulutBean getById(@PathVariable Integer id) { return ResulutBean.success(userService.getById(id)); } //2.新增用户 @PostMapping public ResulutBean save(@RequestBody User user) { return ResulutBean.success(userService.save(user)); } //3.删除用户 @DeletMapping("/{id}") public ResulutBean delete(@PathVariable Integer id) { return ResulutBean.success(userService.deleteById(id)); } //3.修改用户 @PostMapping public ResulutBean delete(@RequestBody User user) { return ResulutBean.success(userService.update(user)); } }
-
注意事项:
- 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users、emps、books。
- 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用
@PathVariable
接收请求路径变量,通常用于传递id值。