赞
踩
目录
2.7 @RequestBody、@RequestParam、@PathVariable区别
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- @Controller //成功spring的bean 我们这里不使用@Component
- //@Controller 这是SpringMVC声明bean的专门注解
- public class UserController {
-
-
- /**
- * 提供给外部,处理请求的操作
- * @return
- */
- @RequestMapping("/save") //设置当前操作的访问路径
- @ResponseBody // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
- //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
- public String save(){
- System.out.println("user save...");
- // 我们选择return一个JSON数据
- return "{'module':'springboot'}";
- }
-
-
- }
当然这个时候post也可以
springboot中常用注解在下面这篇博客当中有一部分
Springboot中常用注解的使用语境、方法以及常用的maven坐标_我爱布朗熊的博客-CSDN博客_lombok maven坐标
类型:类注解
作用:设定spring的核心控制器
- @Controller //成功spring的bean 我们这里不使用@Component
- //@Controller 这是SpringMVC声明bean的专门注解
- public class UserController {
- }
类型:方法注解、类注解
作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
- @RequestMapping("/save") //设置当前操作的访问路径
- public void save(){
- System.out.println("user save...");
-
- }
当然这个注解也可以放到类上面,表示这个类中的方法请求路径的前缀,一般来说一个类的请求前缀都是一个样的,所以我们就没有必要在每个方法中都重复写相同的路径,我们把这一部分相同的路径提取出来放到类上面,这样就方便了我们以后的编码,也更好的将代码业务进行分类,避免出现同一个路径对应多个方法的错误形式
- @Controller //成功spring的bean 我们这里不使用@Component
- //@Controller 这是SpringMVC声明bean的专门注解
- @RequestMapping("/save") //设置当前层的请求前缀
- public class UserController {
- }
类型:方法注解
作用:设置当前控制器方法响应内容为当前返回值,无需解析
- /**
- * 提供给外部,处理请求的操作
- * @return
- */
- @RequestMapping("/save") //设置当前操作的访问路径
- @ResponseBody // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
- //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
- public String save(){
- System.out.println("user save...");
- // 我们选择return一个JSON数据
- return "{'module':'springboot'}";
- }
作用:当请求参数与形参变量名不同,使用@RequestParam绑定参数关系
还有两个参数
内部有个Converter接口,就是将传递的参数和收集的参数的类型进行转换的
@RestController == @ResponseBody+@Controller
@PostMapping ==@RequestMapping( method = RequestMethod.POST )
- /**
- * 提供给外部,处理请求的操作
- * @return
- */
- @RequestMapping("/commonParam") //设置当前操作的访问路径
- @ResponseBody // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
- //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
- public String save(String name){
- System.out.println("普通参数传递 name="+name);
- // 我们选择return一个JSON数据
- return "{'module':'springboot'}";
- }
传递多个参数呢?
- /**
- * 提供给外部,处理请求的操作
- * @return
- */
- @RequestMapping("/commonParam") //设置当前操作的访问路径
- @ResponseBody // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
- //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
- public String save(String name,String age){
- System.out.println("普通参数传递 name="+name);
- System.out.println("普通参数传递 age="+age);
- // 我们选择return一个JSON数据
- return "{'module':'springboot'}";
- }
我们可以看下图的变化,我们选择了POST,然后路径中不再有各种Params
对于请求体编辑参数的位置我们是选择form-data还是x-www-form-urlencoded?
参数种类:
我们还是看看刚刚的get请求
现在我们修改一个地方,将发送请求时携带的params的参数名和后端接收的参数名不一致
- @RequestMapping("/commonParam") //设置当前操作的访问路径
- @ResponseBody // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
- //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
- public String save(@RequestParam("name") String username, String age){
- System.out.println("普通参数传递 name="+username);
- System.out.println("普通参数传递 age="+age);
- // 我们选择return一个JSON数据
- return "{'module':'springboot'}";
- }
-
- @RequestMapping("/pojoParam")
- @ResponseBody
- public String pojoParam(User user){
- System.out.println("普通参数传递 user="+user);
-
- // 我们选择return一个JSON数据
- return "{'module':'pojo param'}";
- }
- public class User {
- private String name;
- private int age;
- private Address address;
- }
- @RequestMapping("/arrayParam")
- @ResponseBody
- public String arrayParam(String[] likes){
- System.out.println("数组传参 like="+ Arrays.toString(likes));
-
- // 我们选择return一个JSON数据
- return "{'module':'arrays'}";
- }
- @RequestMapping("/listParam")
- @ResponseBody
- public String listParam(@RequestParam List<String> likes){
- System.out.println("集合参数传递 like="+ likes);
-
- // 我们选择return一个JSON数据
- return "{'module':'list param'}";
- }
分类:
- @RequestMapping("/listParamJson")
- @ResponseBody
- public String listParamJson(@RequestBody List<String> likes){
- System.out.println("集合参数传递 like="+ likes);
-
- // 我们选择return一个JSON数据
- return "{'module':'list param json'}";
- }
日期类型数据基于系统不同,格式也不尽相同
日期型的参数,可以直接由一个字符串转换成data
-
- @RequestMapping("/dataParam")
- @ResponseBody
- public String dataParam(Date date){
- System.out.println("集合参数传递 date="+ date);
-
- // 我们选择return一个JSON数据
- return "{'module':'date '}";
- }
-
但是当我们传递日期参数使用中行线的形式时,就会报错,就是下图中的date1形式,这怎么呢?
将代码修改为下面这个样子就可以了
- @RequestMapping("/dateParam")
- @ResponseBody
- public String dateParam(Date date, @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1){
- System.out.println("集合参数传递 date="+ date);
- System.out.println("集合参数传递 date="+ date1);
-
- // 我们选择return一个JSON数据
- return "{'module':'date '}";
- }
-
简单来说,将我们的处理结果返回给我们的用户(也可以说是前端,前端接收到页面后再渲染页面)
响应页面非常的简单,将页面名称当做字符串返回
REST :表现形式状态转换
优点:
隐藏资源的访问行为,无法通过地址得知资源是何种操作
书写简化
这是之前的代码
现在的代码(很清晰)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。