1.添加依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-dependencies</artifactId>
<version>2.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
2.创建配置类
package com.example.knife4j.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfiguration {
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
Docket docket=new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//分组名称
.groupName("2.X版本")
.select()
//这里指定Controller扫描包路径(项目路径也行)
.apis(RequestHandlerSelectors.basePackage("com.example.knife4j.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("标题标题")
.description("api接口描述")
.termsOfServiceUrl("http://localhost:88888/")
.contact("1123@qq.com")
.version("1.0")
.build();
}
}
3.创建实体bean
package com.example.knife4j.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Created by lwq 2020/8/14.
*/
@ApiModel(value = "用户模型")
public class UserEntity {
@ApiModelProperty(value="id" ,required= true,example = "1")
private Integer id;
@ApiModelProperty(value="用户姓名" ,required=true,example = "张三")
private String name;
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;
}
@Override
public String toString() {
return "DemoDoctor [id=" + id + ", name=" + name + "]";
}
}
4.测试类
package com.example.knife4j.controller;
import com.example.knife4j.entity.UserEntity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
@Api(value = "用户接口")
@RestController
public class UserController {
@ApiOperation(value = "获取用户信息接口", nickname = "根据用户ID获取用户相关信息")
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "int")
@GetMapping("/getUser")
public UserEntity getUser(@RequestParam Integer id) {
UserEntity userEntity = new UserEntity();
userEntity.setId(id);
userEntity.setName("管理员");
return userEntity;
}
@ApiOperation(value = "添加用户", nickname = "添加用户接口1", notes = "入参是复杂对象", produces = "application/json")
@PostMapping("/postUser")
@ResponseBody
@ApiImplicitParam(paramType = "query", name = "userId", value = "用户id", required = true, dataType = "int")
public UserEntity postUser(@RequestBody UserEntity user, @RequestParam("userId") int userId) { // 这里用包装类竟然报错
if (user.getId() == userId) {
return user;
}
return new UserEntity();
}
@ApiOperation(value = "添加用户", nickname = "添加用户接口2", notes = "入参是简单对象", produces = "application/json")
@PostMapping("/addUser")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "userName", value = "用户姓名", required = true, dataType = "String"),
@ApiImplicitParam(paramType = "query", name = "id", value = "用户id", required = true, dataType = "int")})
public UserEntity addUser(String userName, int id) {
UserEntity userEntity = new UserEntity();
userEntity.setName(userName);
userEntity.setId(id);
return userEntity;
}
}
5.文档接口 http://localhost:8080/doc.html
6.如果不想在生产环境被访问到,可以增加如下配置
#为了接口安全,需要屏蔽所有Swagger的相关资源,生产环境设置为true
knife4j.production=true