运行环境
jdk 1.8
spring boot 2.5.6
maven 3.9.1
编译器 idea
参照1天搞定SpringBoot+Vue全栈开发的学习笔记
RESful介绍
互联网软件服务架构风格
特点
每个URL代表一种资源
客户端操作
GET:获取资源
POST:新建资源
PUT:更新资源
DELETE:删除资源
操作资源的表现形式来实现服务端请求操作
资源表现形式是JSON和HTML
客户端与服务器之间的交互在请求之间是无状态的
RESTful API特性
安全性:GET操作只是获取资源,不能用于修改服务器资源操作
幂等性:重复进行一次请求和一次请求操作对服务器资源的状态修改是一致的
HTTP请求
HTTP状态码
类别
1XX:信息,通信传输协议级信息
2XX:成功,客户端的请求已成功接受
3XX:重定向,客户端必须执行一些其他操作才能完成请求
4XX:客户端错误,此类错误状态码指向客户端
5XX:服务器错误,服务器负责写这类错误码
构建RESful应用接口
Spring Boot通过标记也可支持开发RESTful API
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping //处理PATCH请求,用于部分更新紫云
RESTful中,网址代表资源,URL中建议不包含动词,只包含名词即可,所用名词往往与数据库的表格名对应
实例
@RestController
public class UserController {
@GetMapping("/user/{id}")
public String getUserById(@PathVariable int id){
System.out.println(id);
return "根据ID获取用户信息";
}
@PostMapping("/user")
public String save(User user){ return "添加用户";}
@PutMapping("/user")
public String update(User user){ return "更新用户";}
@DeleteMapping ("/user/{id}")
public String deleteUserById(@PathVariable int id){
System.out.println(id);
return "根据ID删除用户";
}
}
- id是动态的,需要加上花括号{}
@PathVariable
:用于传递参数,可以直接写在路径上,如果不加这个标记,只能传递地址中 ? 后面的参数
添加用户
如在地址栏输入要传递的参数,返回成功信息,后台就可以获取数据
删除用户
通过postman发送DELETE等请求,也可以对数据进行操作
后台返回控制信息
使用Swagger生成Web API文档
Swagger是一个规范和完整的框架,用于动态生成API接口文档
添加swagger依赖
修改pom.xml
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
添加配置文件
@Configuration
@EnableSwagger2 //开启Swagger2功能
public class Swagger2Config {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
//做基本配置
.apiInfo(apiInfo())
.select()
//扫描哪个包
.apis(RequestHandlerSelectors.basePackage("com"))
.paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("演示项目API")
.description("学习Swagger2的演示项目")
.build();
}
}
进行接口测试
访问http://localhost:8080/swagger-ui.html
报错信息
Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException原因:Spring Boot 版本与Swagger 版本不匹配
Spring Boot 2.6.X以下匹配Swagger2
Spring Boot 2.6.X以上匹配Swagger3解决方案:给Spring Boot降级为2.5.6
访问成功的界面如上图所示