一、Swagger简介
1.1 面对的问题
1.2 Swagger
Swagger的官网:https://swagger.io/
最主要就是学习Spring Boot 中如何导入 Swagger 工具,并且展现出项目中的接口文档。
二、maven依赖
我们在使用 Swagger 工具的时候,必须要导入 maven 依赖,否则会出现不必要的错误!!!
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
</dependency>
三、Swagger配置
记住在使用 Swagger 需要进行配置,Spring Boot 中对 Swagger 的配置是非常方便,很简单,一学就会。新建一个配置类,Swagger 的配置类一定要添加@Configuration 注解和@EnableOpenApi 注解,不能马虎!
@EnableOpenApi
@Configuration
public class Swagger3Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30) // 使用 Swagger3.0 版本
.enable(true)// 是否关闭在线文档,生产环境关闭
.apiInfo(apiInfo()) // 指定构建 api 文档的详细信息的方法
.select() // 指定要生成 api 接口的包路径,这里把 action 作为包路径,生成 controller 中的
所有接口 .apis(RequestHandlerSelectors.basePackage("com.xu.action"))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))// 只 有 在 方 法
接口上添加了 ApiOperation 注解
.paths(PathSelectors.any()).build().globalResponses(HttpMethod.GET, getGlobalResponseMessage())
.globalResponses(HttpMethod.POST, getGlobalResponseMessage());
}
// 生成摘要信息
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("接口文档") 设置页面标题
.description("说明信息") 设置接口描述
.contact(new Contact("xumiaomiao", "http://baidu.com", "xu@xu.com")) 设置联系方式
.version("1.0") 设置版本
.build(); 构建
}
四、运用Swagger
现在我已经配置好了 Swagger,并且也测试过了,功能一切正常,下面可以开始使用 Swagger。最重要的就是掌握 Swagger中常用的注解,分别在实体类上、Controller 类上以及 Controller 中的方法上,最后我再查看一下Swagger 是怎么在页面上呈现出在线接口文档的,这是一个很难得问题,花了我好久的功夫!话不多少了最后结合 Controller 中的方法在接口中测试一下数据。
4.1 实体类的注解
定义 User 实体类,我来主要说一下 Swagger 中的@ApiModel 和@ApiModelProperty 注解。
@ApiModel(value = "用户实体类")
public class User {
@ApiModelProperty(value = "用户唯一标识")
private Long id;
@ApiModelProperty(value = "用户姓名")
private String username;
@ApiModelProperty(value = "用户密码")
private String password;
// 省略 set 和 get 方法
}
4.2 Controller 类中的注解
@RestController
@RequestMapping("/swagger")
@Api(value = "Swagger2 在线接口文档")
public class TestController {
@GetMapping("/get/{id}")
@ApiOperation(value = "根据用户唯一标识获取用户信息")
public JsonResult<User> getUserInfo(@PathVariable @ApiParam(value = "用户唯一标识") Long id) {
// 模拟数据库中根据 id 获取 User 信息
User user = new User(id, "徐苗苗", "123456");
return new JsonResult(user);
}
}
@PostMapping("/insert")
@ApiOperation(value = "添加用户信息")
public JsonResult<Void> insertUser(@RequestBody @ApiParam(value = "用户信息") User user) {
// 处理添加逻辑
return new JsonResult<>();
}
五、Thymeleaf 模板引擎
5.1 Thymeleaf 简介
Thymeleaf 是用于 Web 和独立环境的现代服务器端 Java 模板引擎。
在本地环境或者有网络的环境下,Thymeleaf 都可以运行。 thymeleaf 支持 html 原型,也支持在 html 标签里增加额外的属性,所以可以直接在浏览器中查看页面效果,当服务启动之后,也可以查看带数据的动态页面效果。
<div class="ui right aligned basic segment">
<div class="ui orange basic label" th:text="${blog.flag}">静态原创信息</div>
</div>
<h2 class="ui center aligned header" th:text="${blog.title}">这是静态标题</h2>
5.2 依赖导入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
5.3 Thymeleaf 相关配置
5.4 Thymeleaf 的使用
5.4.1 访问静态页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>这是 404 页面</body>
</html>
再写一个 controller 来测试一下 404 和 500 页面:
@Controller
@RequestMapping("/thymeleaf")
public class ThymeleafController {
@RequestMapping("/test404")
public String test404() {
return "index";
}
@RequestMapping("/test500")
public String test500() {
int i = 1 / 0;
return "index";
}
}
5.4.2 Thymeleaf 中处理对象
public class Blogger {
private Long id;
private String name;
private String pass;
// 省去 set 和 get
}
@GetMapping("/getBlogger")
public String getBlogger(Model model) {
Blogger blogger = new Blogger(1L, "徐苗苗", "123456");
model.addAttribute("blogger", blogger);
return "blogger";
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博主信息</title>
</head>
<body>
<form action="" th:object="${blogger}" >
用户编号:<input name="id" th:value="${blogger.id}"/><br>
用户姓名:<input type="text" name="username" th:value="${blogger.getName()}" /><br>
登陆密码:<input type="text" name="password" th:value="*{pass}" />
</form>
</body>
</html>
5.4.3 在Thymeleaf 中处理 List
处理 List 和处理对象差不多,变换不大,但是需要在 thymeleaf 中进行遍历。先在 Controller 中模拟一个 List。
@GetMapping("/getList")
public String getList(Model model) {
Blogger blogger1 = new Blogger(1L, "徐苗苗", "123456");
Blogger blogger2 = new Blogger(2L, "徐苗苗2", "123456");
List<Blogger> list = new ArrayList<>();
list.add(blogger1);
list.add(blogger2);
model.addAttribute("list", list);
return "list";
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博主信息</title>
</head>
<body>
<form action="" th:each="blogger : ${list}" >
用户编号:<input name="id" th:value="${blogger.id}"/><br>
用户姓名:<input type="text" name="password" th:value="${blogger.name}"/><br>
登录密码:<input type="text" name="username" th:value="${blogger.getPass()}"/>
</form>
</body>
</html>