目录
2.7 @RequestBody、@RequestParam、@PathVariable区别
一、入门案例(小了解,没啥用)
1.1 创建Springboot工程
1.2 导入maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
1.3 controller层代码
@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'}";
}
}
1.4 postman测试
当然这个时候post也可以
二、 REST常用注解
springboot中常用注解在下面这篇博客当中有一部分
Springboot中常用注解的使用语境、方法以及常用的maven坐标_我爱布朗熊的博客-CSDN博客_lombok maven坐标
2.1 @Controller
类型:类注解
作用:设定spring的核心控制器
@Controller //成功spring的bean 我们这里不使用@Component
//@Controller 这是SpringMVC声明bean的专门注解
public class UserController {
}
2.2 @RequestMapping(请求映射路径)
类型:方法注解、类注解
作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
@RequestMapping("/save") //设置当前操作的访问路径
public void save(){
System.out.println("user save...");
}
当然这个注解也可以放到类上面,表示这个类中的方法请求路径的前缀,一般来说一个类的请求前缀都是一个样的,所以我们就没有必要在每个方法中都重复写相同的路径,我们把这一部分相同的路径提取出来放到类上面,这样就方便了我们以后的编码,也更好的将代码业务进行分类,避免出现同一个路径对应多个方法的错误形式
@Controller //成功spring的bean 我们这里不使用@Component
//@Controller 这是SpringMVC声明bean的专门注解
@RequestMapping("/save") //设置当前层的请求前缀
public class UserController {
}
2.3 @ResponseBody
类型:方法注解
作用:设置当前控制器方法响应内容为当前返回值,无需解析
/**
* 提供给外部,处理请求的操作
* @return
*/
@RequestMapping("/save") //设置当前操作的访问路径
@ResponseBody // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
//简单的说就是把我们要响应的东西作为一个整体内容返回到前端
public String save(){
System.out.println("user save...");
// 我们选择return一个JSON数据
return "{'module':'springboot'}";
}
2.4 @ComponentScan
2.5 @RequestParam
作用:当请求参数与形参变量名不同,使用@RequestParam绑定参数关系
还有两个参数
- required:是否为必传参数
- defaultValue:参数默认值
2.6 @RequestBody
2.7 @RequestBody、@RequestParam、@PathVariable区别
2.8 @DateTimeFormat
内部有个Converter接口,就是将传递的参数和收集的参数的类型进行转换的
2.9 @PathVariable
2.10 @RestController
@RestController == @ResponseBody+@Controller
2.11 @PostMapping
@PostMapping ==@RequestMapping( method = RequestMethod.POST )
三、请求与响应
3.1 请求方式
3.1.1 Get请求普通参数传递
/**
* 提供给外部,处理请求的操作
* @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'}";
}
3.1.2 Post请求普通参数传递
我们可以看下图的变化,我们选择了POST,然后路径中不再有各种Params
对于请求体编辑参数的位置我们是选择form-data还是x-www-form-urlencoded?
四、请求参数(了解,以后常用的是传JSON)
参数种类:
- 普通参数
- POJO类型参数
- 嵌套POJO类型参数
- 数组类型参数
- 集合类型参数
4.1 普通参数(不同名称的映射)
我们还是看看刚刚的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'}";
}
4.2 POJO类型参数
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("普通参数传递 user="+user);
// 我们选择return一个JSON数据
return "{'module':'pojo param'}";
}
4.3 嵌套POJO类型参数
public class User {
private String name;
private int age;
private Address address;
}
4.4 数组类型参数
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
System.out.println("数组传参 like="+ Arrays.toString(likes));
// 我们选择return一个JSON数据
return "{'module':'arrays'}";
}
4.5 集合类型参数
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
System.out.println("集合参数传递 like="+ likes);
// 我们选择return一个JSON数据
return "{'module':'list param'}";
}
五、请求与响应(重要,传送JSON数据)
5.1 JSON请求参数
分类:
- JSON数据
- JSON对象(POJO)
- JSON数据(POJO)
5.1.1 JSON数据
@RequestMapping("/listParamJson")
@ResponseBody
public String listParamJson(@RequestBody List<String> likes){
System.out.println("集合参数传递 like="+ likes);
// 我们选择return一个JSON数据
return "{'module':'list param json'}";
}
5.1.2 JSON对象(POJO)
5.1.3 JSON对象(POJO集合参数)
5.2 日期型参数传递
日期类型数据基于系统不同,格式也不尽相同
日期型的参数,可以直接由一个字符串转换成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 '}";
}
5.3 响应
简单来说,将我们的处理结果返回给我们的用户(也可以说是前端,前端接收到页面后再渲染页面)
- 响应页面
- 响应数据 (文本数据、JSON数据)
5.3.1 响应页面(用的很少,几乎不用)
响应页面非常的简单,将页面名称当做字符串返回
5.3.2 响应文本数据
5.3.3 响应JSON数据
六、REST风格
REST :表现形式状态转换
优点:
隐藏资源的访问行为,无法通过地址得知资源是何种操作
书写简化
6.1 RESTful 快速开发(简化)
这是之前的代码
现在的代码(很清晰)