springboot swagger2案例
非原创,哪位老哥的也不记得了。。。
没啥好说的,就是api接口自动生成文档
源码:https://github.com/youxiu326/sb_swagger2.git
- 引入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.16.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.huarui</groupId> <artifactId>sb_swagger2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>sb_swagger2</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
- swagger2配置类
package com.youxiu326.config; 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.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * Created by lihui on 2019/1/22. */ @Configuration @EnableSwagger2 public class SwaggerConfig { /** * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等 * @return */ @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.youxiu326.controller")) .paths(PathSelectors.any()).build(); } /* 以注解方式查询 @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) public @interface EnableApi { } @Bean public Docket createRestApi() { Predicate<RequestHandler> predicate = new Predicate<RequestHandler>() { @Override public boolean apply(RequestHandler input) { Class<?> declaringClass = input.declaringClass(); if(declaringClass.isAnnotationPresent(EnableApi.class)) // 被注解的类 return true; if(input.isAnnotatedWith(EnableApi.class)) // 被注解的方法 return true; return false; } }; return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .useDefaultResponseMessages(false) .select() .apis(predicate) .build(); }*/ //构建api文档的详细信息函数 private ApiInfo apiInfo() { return new ApiInfoBuilder() //页面标题 .title("springBoot测试使用Swagger2构建RESTful API") //创建人 .contact(new Contact("youxiu326", "http://youxiu326.com", "")) //版本号 .version("1.0") //描述 .description("API 描述") .build(); } }
- 注解解释
参数详解可参考:https://blog.csdn.net/jiangyu1013/article/details/83107255
主要参数: @Api:修饰整个类,描述Controller的作用 例如:@Api(value="书籍controller",tags={"书籍操作接口"}) @ApiOperation:描述一个类的一个方法,或者说一个接口 例如 @ApiOperation(value="form格式提交创建图书", notes="form格式提交创建图书(哈哈哈)") @ApiImplicitParams:用在请求的方法上,表示一组参数说明 @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面 name:参数名 value:参数的汉字说明、解释 required:参数是否必须传 paramType:参数放在哪个地方 · header --> 请求参数的获取:@RequestHeader · query --> 请求参数的获取:@RequestParam · path(用于restful接口)--> 请求参数的获取:@PathVariable · body(不常用) · form(不常用) dataType:参数类型,默认String,其它值dataType="Integer" defaultValue:参数的默认值 例如: @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String",paramType = "query"), @ApiImplicitParam(name = "price", value = "价格", required = true, dataType = "float",paramType = "query") }) paramType 有五个可选值 : path, query, body, header, form 例如 我是从路径中去读的值 http://localhost:8088/bookcurd/1 @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path") Content-type常见类型: 1.application/x-www-form-urlencoded 2.application/json 3.multipart/form-data 4.text/xml consumes = "application/x-www-form-urlencoded;charset=utf-8" 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html produces = "application/json;charset=utf-8" 返回json格式数据 @ApiParam:单个参数描述 @ApiModel:用对象来接收参数 @ApiProperty:用对象接收参数时,描述对象的一个字段 @ApiResponse:HTTP响应其中1个描述 @ApiResponses:HTTP响应整体描述 @ApiIgnore:使用该注解忽略这个API @ApiError :发生错误返回的信息 @ApiParamImplicitL:一个请求参数 @ApiParamsImplicit 多个请求参数
package com.youxiu326.controller; import com.youxiu326.entity.Book; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import java.util.*; @RestController @RequestMapping(value = "/bookcurd") @Api("图书列表相关api") public class BookController { /** * @Api:修饰整个类,描述Controller的作用 @ApiOperation:描述一个类的一个方法,或者说一个接口 @ApiParam:单个参数描述 @ApiModel:用对象来接收参数 @ApiProperty:用对象接收参数时,描述对象的一个字段 @ApiResponse:HTTP响应其中1个描述 @ApiResponses:HTTP响应整体描述 @ApiIgnore:使用该注解忽略这个API @ApiError :发生错误返回的信息 @ApiParamImplicitL:一个请求参数 @ApiParamsImplicit 多个请求参数 */ /**Content-type常见类型: * 1.application/x-www-form-urlencoded * 2.application/json * 3.multipart/form-data * 4.text/xml * consumes = "application/x-www-form-urlencoded;charset=utf-8" 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html * produces = "application/json;charset=utf-8" 返回json格式数据 */ Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, Book>()); @ApiOperation(value="获取图书列表", notes="获取图书列表") @RequestMapping(value={""}, method= RequestMethod.GET) public List<Book> getBook() { List<Book> book = new ArrayList<>(books.values()); return book; } @ApiOperation(value="form格式提交创建图书", notes="form格式提交创建图书(哈哈哈)") @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "名称", required = true, dataType = "String",paramType = "query"), @ApiImplicitParam(name = "price", value = "价格", required = true, dataType = "float",paramType = "query") }) @RequestMapping(value = "/saveBook",method = RequestMethod.POST,consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public String saveBook(Book book){ Book book1 = books.get(book.getId()); if(book1 == null){ book1 = new Book(); book1.setId(new Random().nextLong()); } book1.setName(book.getName()); book1.setPrice(book.getPrice()); books.put(book1.getId(), book1); // 这里返回json字符串 return "{\"msg\":\"SUCCESS!\",\"state\":1}"; } @ApiOperation(value="json格式提交创建图书", notes="json格式提交创建图书") @ApiImplicitParam(name = "book", value = "图书详细实体", required = true, dataType = "Book") @RequestMapping(value="", method=RequestMethod.POST) public String postBook(@RequestBody Book book) { books.put(book.getId(), book); return "SUCCESS"; } @ApiOperation(value="获图书细信息", notes="根据url的id来获取详细信息") @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path") @RequestMapping(value="/{id}", method=RequestMethod.GET) public Book getBook(@PathVariable Long id) { return books.get(id); } @ApiOperation(value="更新信息", notes="根据url的id来指定更新图书信息") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path"), @ApiImplicitParam(name = "book", value = "图书实体book", required = true, dataType = "Book") }) @RequestMapping(value="/{id}", method= RequestMethod.PUT,produces = "application/json") public String putUser(@PathVariable Long id, @RequestBody Book book) { Book book1 = books.get(id); book1.setName(book.getName()); book1.setPrice(book.getPrice()); books.put(id, book1); return "SUCCESS"; } @ApiOperation(value="删除图书", notes="根据url的id来指定删除图书") @ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path") @RequestMapping(value="/{id}", method=RequestMethod.DELETE) public String deleteUser(@PathVariable Long id) { books.remove(id); return "SUCCESS"; } @ApiIgnore//使用该注解忽略这个API @RequestMapping(value = "/hi", method = RequestMethod.GET) public String jsonTest() { return " hi you!"; } }
- 演示