目录
一、入门案例(小了解,没啥用)
1.1 创建Springboot工程
1.2 导入maven坐标
1.3 controller层代码
1.4 postman测试
二、 REST常用注解
2.1 @Controller
2.2 @RequestMapping(请求映射路径)
2.3 @ResponseBody
2.4 @ComponentScan
2.5 @RequestParam
2.6 @RequestBody
2.7 @RequestBody、@RequestParam、@PathVariable区别
2.8 @DateTimeFormat
2.9 @PathVariable
2.10 @RestController
2.11 @PostMapping
三、请求与响应
3.1 请求方式
3.1.1 Get请求普通参数传递
3.1.2 Post请求普通参数传递
四、请求参数(了解,以后常用的是传JSON)
4.1 普通参数(不同名称的映射)
4.2 POJO类型参数
4.3 嵌套POJO类型参数
4.4 数组类型参数
4.5 集合类型参数
五、请求与响应(重要,传送JSON数据)
5.1 JSON请求参数
5.1.1 JSON数据
5.1.2 JSON对象(POJO)
5.1.3 JSON对象(POJO集合参数)
5.2 日期型参数传递
5.3 响应
5.3.1 响应页面(用的很少,几乎不用)
5.3.2 响应文本数据
5.3.3 响应JSON数据
六、REST风格
6.1 RESTful 快速开发(简化)
org.springframework.boot
spring-boot-starter-web
@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 likes){
System.out.println("集合参数传递 like="+ likes);
// 我们选择return一个JSON数据
return "{'module':'list param'}";
}
分类:
@RequestMapping("/listParamJson")
@ResponseBody
public String listParamJson(@RequestBody List 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 :表现形式状态转换
优点:
隐藏资源的访问行为,无法通过地址得知资源是何种操作
书写简化
这是之前的代码
现在的代码(很清晰)