@RestController的简述
这个注解是@Controller
和@ResponseBody
两个注解的组合,它使得类中的每个方法默认都会返回数据而不是视图(如JSP页面)。
return可以在界面中返回数据,如图
获取简单参数
简单参数的获取get和post方法都是一样的
get方法
可以利用postman来输入参数作为测试
注意参数名要和形参的变量名相同
package com.example.springboot_start.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//springboot方式接收参数
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(String name, Integer age){
System.out.println(name + ":" + age);
return "ok";
}
}
然后在postman里输入参数:
就能获得:
然后这个方法还return了"ok"
所以就可以在浏览器看到ok
post方法
浏览器输出
控制台输出:
形参和请求参数不一致时:
如果方法形参名称和请求参数名称不一致的时候,可以使用@RequestParam映射
如下
package com.example.springboot_start.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
//springboot方式接收参数
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name="name")String username, Integer age){
System.out.println(username + ":" + age);
return "ok";
}
}
注意这个
在@RequestParam(name=“name”)注解中,name属性的作用是指定要绑定到方法参数的HTTP请求参数的名称
在以上代码中,就是可以把请求参数的name的值赋到username上面
这样即便请求参数和形参不一致也没问题了
实体参数
简单实体对象
刚才说了两个参数的情况,那如果要是一大堆参数咋办呢?
一大堆参数传参就费劲了
所以可以整个实体对象
我们先搞个pojo包(Plain Old Java Object)
再在里面弄个User类用于定义User对象
User类:
package com.example.springboot_start.pojo;
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user.getName() + ":" + user.getAge());
return "ok";
}
在postman里就正常传参即可
输出:
别忘记请求参数名要和形参对象属性名相同
复杂实体对象
如果说有如下情况的实体对象呢?
name, age还是和之前一样封装
重点是这个address怎么封装
封装方式如下图
就是以以“类.属性”的方式传进去
咱把控制器类改成能显示address的样子
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user.getName() + ":" + user.getAge() + " And the address is :"+
user.getAddress().getProvince() + "," + user.getAddress().getCity()
);
return "ok";
}
然后get一下看看效果
效果如下
数组集合参数
方法一: 用数组封装
使用场景:
比如说前端如下图所示
一下子要传一坨参数
这个时候就可以用数据集合参数了
控制器类:
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
//这就是要传递进去一个数组 然后里面是一坨hobby
System.out.println("我的爱好有:");
for(String i:hobby){
System.out.println(i + " ");
}
return "ok";
}
postman:
注意key都是一样的,都是array的名字
结果:
方法二: 用list封装
控制器类:
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
//这就是要传递进去一个数组 然后里面是一坨hobby
System.out.println(hobby);
return "ok";
}
注意,因为多个值默认会封装到数组当中
所以要用@RequestParam List<String> hobby
来绑定到数组当中
输出:
日期参数
控制器类:
@RequestMapping("/timeParam")
public String timeParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time){
//这就是要传递进去一个数组 然后里面是一坨hobby
System.out.println(time);
return "ok";
}
关键点:
@DateTimeForma
t注解有几个属性,其中最常用的是pattern
。
pattern
属性:pattern属性允许你指定一个日期时间的格式模式。这个模式是一个字符串,定义了日期和时间的格式。模式中的每个字符都有特定的含义,例如:
yyyy:四位数的年份
MM:两位数的月份
dd:两位数的日期
HH:24小时制的小时
mm:分钟
ss:秒
别忘记补0,除了年意外都是两位
JSON参数
这个就必须用post请求了
因为json必须在请求体中携带
以下红框为注意事项
其中,@RequestBody
这个注释的作用:
Spring MVC会尝试将传入的HTTP请求体(通常是JSON或XML格式)自动转换为注解所标注参数类型的实例
所以在这个里面就是把我们在请求体所发送的JSON数据自动转换成User的数据类
别忘记JSON的数据键名和形参对象属性名相同
路径参数
一个参数
请求体代码如下
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable String id){
System.out.println(id);
return "okk";
}
postman:
然后我们再回头讲解下请求体代码:
其中,@PathVariable
注解用于将请求URI中的模板变量(即路径变量)绑定到功能处理方法的参数上
最终打印出:
两个参数(多个参数
和一个参数同理,就有一丢丢地方不一样捏
请求体:
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable String id, @PathVariable String name){
System.out.println(id + "," + name);
return "okk";
}
postman:
打印: