1.Springboot下的SpringMVC注解
1.1 注解解释
-
1.1 Controller注解
Spring MVC 的注解,处理 http 请求 -
1.2 @RestController注解
Spring 4 后新增注解,是@Controller 注解功能的增强是 @Controller 与@ResponseBody 的组合注解
如果一个 Controller 类添加了@RestController,那么该 Controller 类下的所有方法都相当于添加了@ResponseBody 注解用于返回字符串或 json 数据 -
1.3 @RequestMapping(常用)
支持 Get 请求,也支持 Post 请求 -
1.4 @GetMapping
RequestMapping 和 Get 请求方法的组合,只支持 Get 请求Get 请求主要用于查询操作 -
1.5 @PostMapping
RequestMapping 和 Post 请求方法的组合,只支持 Post 请求,Post 请求主要用户新增数据 -
1.6 @PutMapping
RequestMapping 和 Put 请求方法的组合,只支持 Put 请求,Put 通常用于修改数据 -
1.7 @DeleteMapping
RequestMapping 和 Delete 请求方法的组合,只支持 Delete 请求,通常用于删除数据
1.2 案例
- 1 、代码编写
创建一个 MVCController,里面使用上面介绍的各种注解接收不同的请求
package com.zzy.springboot.web;
import org.springframework.web.bind.annotation.*;
@RestController
RestController 注解相当于加了给方法加了@ResponseBody 注解,所以是不能跳转页面的,
//只能返回字符串或者 json 数据
public class MVCController {
@GetMapping(value = "/query")
public String get() {
return "@GetMapping 注解,通常查询时使用";
}
@PostMapping(value = "/add")
public String add() {
return "@PostMapping 注解,通常新增时使用";
}
@PutMapping(value = "/modify")
public String modify() {
return "@PutMapping 注解,通常更新数据时使用";
}
@DeleteMapping(value = "/remove")
public String remove() {
return "@DeleteMapping 注解,通常删除数据时使用";
}
}
- 2、运行
1.3 使用Postman测试
1.3.1 Http 接口请求工具 Postman 介绍
因为通过浏览器输入地址,默认发送的只能是 get 请求,通过 Postman 工具,可以模拟发送不同类型的请求,并查询结果
1.3.2 主界面介绍
1.3.3 测试结果
-
查询
-
-
新增
-
-
修改
-
-
删除
-
2.Spring Boot 实现 RESTful
2.1 认识 RESTFul
- REST(英文:Representational State Transfer,简称 REST)一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次,
- 任何的技术都可以实现这种理念,如果一个架构符合 REST 原则,就称它为 RESTFul 架构
- 比如我们要访问一个 http 接口:
- http://localhost:8080/boot/order?id=1021&status=1
- 采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1
2.2 Spring Boot 开发 RESTFul
-
1、@PathVariable
- 获取 url 中的数据
- 该注解是实现 RESTFul 最主要的一个注解
-
2、@PostMapping
- 接收和处理 Post 方式的请求
-
3、@DeleteMapping
- 接收 delete 方式的请求,可以使用GetMapping 代替
-
4、@PutMapping
- 接收 put 方式的请求,可以用 PostMapping 代替
-
5、@GetMapping
- 接收 get 方式的请求
2.3 案例
2.3.3 编辑pijo实体类
package com.zzy.springboot.pojo;
public class Student {
private Integer id;
private String name;
private Integer age;
public Student() {
}
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
}
2.3.2 编辑StudentController
package com.zzy.springboot.web;
import com.zzy.springboot.pojo.Student;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
@RestController
public class StudentController {
@RequestMapping(value = "/student/query")
public Object student1(Integer id,Integer age){
Student student = new Student();
student.setId(id);
student.setAge(age);
return student;
}
//RESTful将请求参数放置在请求路径中
@GetMapping(value = "/student/query/{id}/{age}")
public Object student2(@PathVariable("id") Integer id,
@PathVariable("age") Integer age){
HashMap<String,Object> map = new HashMap();
map.put("id", id);
map.put("age", age);
return map;
}
// 新增数据请求方式
@PostMapping(value = "/student/{id}")
public Object addStudent(@PathVariable("id") Integer id){
return "add stu success"+id;
}
//修改数据请求方式
@PutMapping(value = "/student/{id}")
public Object updateStudent(@PathVariable("id") Integer id){
return "update stu success"+id;
}
//student3和student2中参数名称不一致
@DeleteMapping(value = "/student/delete/{id}/{ageS}")
public Object student3(@PathVariable("id") Integer id,
@PathVariable("ageS") Integer age){
HashMap<String,Object> map = new HashMap();
map.put("id", id);
map.put("age", age);
return map;
}
//student4和student3请求冲突 更改请求路径中参数的位置
@DeleteMapping(value = "/student/{id}/delete/{city}")
public Object student4(@PathVariable("id") Integer id,
@PathVariable("city") Integer city){
HashMap<String,Object> map = new HashMap();
map.put("id", id);
map.put("city", city);
return map;
}
}
2.3.3 运行主启动类
2.3.4 使用Postman进行测试访问
- 1、查询
- http://localhost:8012/student/query/11/22
- 2、新增
- http://localhost:8012/student/11
- 3、修改
- http://localhost:8012/student/33333
- 4、删除方式一
- http://localhost:8012/student/delete/1/33
- 5、删除方式二 (与方式一的请求路径冲突,改变请求参数位置)
-http://localhost:8012/student/1/delete/222
2.4 总结
其实这里我们能感受到的好处
- 传递参数变简单了
- 服务提供者对外只提供了一个接口服务,而不是传统的 CRUD 四个接口
2.5 RESTful 原则
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。