1 项目集成:
第一步:pom.xml 添加相关的依赖jar包
<!-- 升级版的swagger依赖的jar包-->
<!-- swagger用于定义API文档 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!--美化swagger-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.3</version>
</dependency>
第二步: 创建两个相关的配置类,记得添加注解-> @Configuration 和 @EnableSwagger2
第1个配置类:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.icitic.mc.user.services.web")) //此次每次使用须换成自己的web接口的全限定类名
//.paths(AppUtility.isProd() ? PathSelectors.none() : PathSelectors.any())
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("测试swagger")
.description("展示swagger界面")
.termsOfServiceUrl("http://localhost:9001/swagger-ui.html")
.contact(new Contact("tina.liu", "http://localhost:9001/swagger-ui.html", "xxxxx@qq.com"))
.version("1.0")
.build();
}
}
第2个配置类:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//排除静态文件
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
}
第三步: 查看 http://127.0.0.1:8089/doc.html
2 . swagger 相关的一些注解 及范例:
@Api(tags = "用户模块"):用在类上,说明该类的作用。
@ApiOperation:注解来给API增加方法说明。
@ApiImplicitParams : 用在方法上包含一组参数说明。
@ApiImplicitParam:用来注解来给方法入参增加说明。
@ApiResponses:用于表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
- code:数字,例如400
- message:信息,例如"请求参数没填好"
- response:抛出异常的类
@ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候) - @ApiModelProperty:描述一个model的属性
注意:@ApiImplicitParam的参数说明:
paramType:指定参数放在哪个地方
header:请求参数放置于Request Header,使用@RequestHeader获取
query:请求参数放置于请求地址,使用@RequestParam获取
path:(用于restful接口)-->请求参数的获取:@PathVariable
body:(不常用)
form(不常用)
name:参数名
dataType:参数类型
required:参数是否必须传 true | false
value:说明参数的意思
defaultValue:参数的默认值
(1)Model (数据库表的映射对象,及实体类)中使用 Swagger 注解
@ApiModel(value = "UserEntity", description = "用户对象")
public class UserEntity implements Serializable{
@ApiModelProperty(value ="用户id",name="id",dataType="Long",required = false,example = "1",hidden = false )
private Long id;
@ApiModelProperty(value ="用户名",name="userName",dataType="String",required = false,example = "关羽" )
private String userName;
@ApiModelProperty(value ="用户性别",name="userSex",dataType="String",required = false,example = "男" )
private String userSex;
}
(2) web层API接口(controller类) 中使用swagger注解
@RestController
@Slf4j
@RequestMapping(value = "/v1/service")
@RefreshScope // 支持nacos配置动态刷新的功能
@Api(tags = "用户模块")
public class UserApi {
@Autowired
private UserService userService;
@ApiOperation(value = "分页查询")
@ApiImplicitParams(value ={
@ApiImplicitParam(name = "page",value="当前页码",required = false,dataType = "Integer",paramType = "query"),
@ApiImplicitParam(name="size",value = "每页大小",required = false,dataType = "Integer",paramType = "query"),
} )
@GetMapping
public Response getUserByPage(UserPageable userPageable){
return userService.getUserByPage(userPageable);
}
// 根据Id查询用户的信息
@ApiOperation(value = "用户查询",notes ="用户查询")
@ApiImplicitParam(name = "id",value = "id",required = true
,dataType = "Long",paramType = "path")
@GetMapping(value = "/{id}")
public Response getUserById(@PathVariable Long id) {
return Response.success().data("data",userService.getUserById(id));
}
//添加用户的接口
@ApiOperation(value = "添加用户",notes = "添加用户")
@ApiImplicitParam(name="request",value = "新增用户参数",required = true,dataType = "UserCreateRequest",paramType = "body")
@PostMapping
public Response createUser(@RequestBody UserCreateRequest request){
return userService.save(request);
}
//根据ID删除用户的接口
@ApiOperation(value = "根据ID删除用户",notes = "根据ID删除用户")
@ApiImplicitParam(name ="id",value = "id",required = true,dataType = "Long",paramType = "path")
@DeleteMapping(value = "/{id}")
public Response deleteUserById(@PathVariable Long id){
return userService.deleteUserById(id);
}
//修改用户的接口
@ApiOperation(value = "修改用户")
@ApiImplicitParam(name = "request",value = "修改用户的参数",required = true,dataType = "UserUpdateRequest",paramType = "body")
@PutMapping(value = "/{id}")
public Response updateUser(@RequestBody UserUpdateRequest request , @PathVariable Long id){
return userService.updateUser(request,id);
}
//用户登陆的接口
@ApiOperation(value = "用户登陆",notes = "用户登陆")
@ApiImplicitParam(name="request",value = "用户登陆的参数",required = true,dataType = "UserLoginRequest",paramType = "body")
@PostMapping(value = "/login")
public Response Login(@RequestBody UserLoginRequest request){
User user = userService.login(request);
if(user != null){
return Response.fail().data("token",TokenUtil.getToken());
}
return Response.success().data("token",null);
}
}