博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微服务之swagger
阅读量:6944 次
发布时间:2019-06-27

本文共 8315 字,大约阅读时间需要 27 分钟。

Swagger使用

1. Swagger UI

按以下步骤配置,项目启动后访问:

1.1 添加依赖

io.springfox
springfox-swagger2
2.2.2
io.springfox
springfox-swagger-ui
2.2.2

1.2 配置类

@Configuration  @EnableSwagger2  public class Swagger2 { public static final String SWAGGER_SCAN_BASE_PACKAGE = "abc.boot.examples.web"; public static final String VERSION = "1.0.0"; @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))//api接口包扫描路径 .paths(PathSelectors.any())//可以根据url路径设置哪些请求加入文档,忽略哪些请求 .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Swagger2 接口文档示例")//设置文档的标题 .description("更多内容请关注:http://www.abc.com")//设置文档的描述->1.Overview .version(VERSION)//设置文档的版本信息-> 1.1 Version information .contact(new Contact("ABC Boot", "http://www.abc.comt", ""))//设置文档的联系方式->1.2 Contact information .termsOfServiceUrl("www.abc.com")//设置文档的License信息->1.3 License information .build(); } }

1.3 注解使用

@ApiOperation

@ApiOperation(value="获取用户列表", notes="获取所有用户列表",produces = "application/json")  @RequestMapping(value="/users", method= RequestMethod.GET) public List
getUserList() { List
r = new ArrayList
(users.values()); return r; }

@ApiResponses

@ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息",produces = "application/json")// ApiResponses 增加返回结果的描述 @ApiResponses(value = { @ApiResponse(code = 405,message = "Invalid input",response = Integer.class)}) (1) @ApiImplicitParam(name = "id",value = "用户ID",dataType = "int",paramType = "path") (2) @RequestMapping(value="/users/{id}", method= RequestMethod.GET) public User getUser(@PathVariable Integer id) { return users.get(id); }

(1) 在默认Response的基础上增加新的Response说明

(2) 使用ApiImplicitParam描述接口参数

@ApiImplicitParams

@ApiOperation(value="更新用户名称", notes="更新指定用户的名称")@RequestMapping(value="/users/{id}", method= RequestMethod.POST) @ApiImplicitParams({ (1) @ApiImplicitParam(name = "id",value = "用户ID",paramType = "path",dataType = "int"), (2) @ApiImplicitParam(name = "userName",value = "用户名称",paramType = "form",dataType = "string") }) public void updateUserName(@PathVariable Integer id,@RequestParam String userName){ User u = users.get(id); u.setName(userName); }

(1) 使用ApiImplicitParams描述多个参数

(2) 使用ApiImplicitParam时,需要指定paramType,这样也便于swagger ui 生成参数的输入格式。

paramType 有五个可选值 : path, query, body, header, form

@ApiParam

@ApiOperation(value="创建用户-传递简单对象", notes="传递简单对象",produces = "application/json")@RequestMapping(value="/users-1", method= RequestMethod.POST) //可以不加ApiParam注解,需要给参数添加描述时可以使用这个注解,或者使用ApiImplicitParams注解 (1) public Map postUser(@RequestParam String userName,@ApiParam("地址") @RequestParam(required = false) String address) { User user = new User(); user.setId(Math.round(10)); user.setName(userName); user.setAddress(address); users.put(user.getId(), user); return ImmutableMap.of("user",user); }

(1) 使用ApiParam描述接口参数

ApiImplicitParam 与 ApiParam 的区别

ApiImplicitParam: This is the only way to define parameters when using Servlets or other non-JAX-RS environments.

  • 对Servlets或者非 JAX-RS的环境,只能使用 ApiImplicitParam。
  • 在使用上,ApiImplicitParam比ApiParam具有更少的代码侵入性,只要写在方法上就可以了,但是需要提供具体的属性才能配合swagger ui解析使用。
  • ApiParam只需要较少的属性,与swagger ui配合更好。

传递复杂对象 By ModelAttribute

@ApiOperation(value="创建用户-传递复杂对象", notes="传递复杂对象DTO, url参数拼接",produces = "application/json")@RequestMapping(value="/users-2", method= RequestMethod.POST) //传递对象推荐使用ModelAttribute注解 public Map postUser2(@ModelAttribute User user) { (1) users.put(user.getId(),user); return ImmutableMap.of("user",user); }

(1) ModelAttribute 是Spring mvc的注解,这里Swagger可以解析这个注解,获得User的属性描述

@ApiModel

@ApiModel(value = "User", description = "用户对象")public class User { @ApiModelProperty(value = "ID") private Integer id; @ApiModelProperty(value = "姓名") private String name; @ApiModelProperty(value = "地址") private String address; @ApiModelProperty(value = "年龄",access = "hidden") private int age; @ApiModelProperty(value = "性别") private int sex; ....... }

传递复杂对象 By RequestBody

@ApiOperation(value="创建用户-传递复杂对象", notes="传递复杂对象DTO,json格式传递数据",produces = "application/json")@RequestMapping(value="/users-3", method= RequestMethod.POST) //json格式传递对象使用RequestBody注解 public User postUser3(@RequestBody User user) { users.put(user.getId(),user); return user; }

PathVariable

@ApiOperation(value="删除用户- PathVariable", notes="根据url的id来指定删除对象")@RequestMapping(value="/users/{id}", method = RequestMethod.DELETE) public void deleteUser(@PathVariable Integer id) { (1) users.remove(id); }

(1) PathVariable是Spring 的注解,对于这种简单的参数,就可以不用写ApiParam来描述接口参数。

数组的描述

@ApiOperation(value="删除用户-传递数组", notes="删除对象,传递数组")@RequestMapping(value="/users/deleteByIds", method = RequestMethod.DELETE) public void deleteUser(@ApiParam("用户ID数组") @RequestParam Integer[] ids) { (1) for (int id:ids){ users.remove(id); } }

(1) 这里用ApiParam为数组参数添加描述

1.4 可选配置

在application.properties中加入以下配置,用于设置测试请求的host,默认在swagger ui上做请求测试时都是以/users/1为路径发送请求。

如果需要改变请求的根路径,就需要配置这个参数:
springfox.documentation.swagger.v2.host = yourapp.abc.com

配置获取api docs json数据的请求路径 ,默认为/v2/api-docs:

springfox.documentation.swagger.v2.path = /api

2. springfox-staticdocs 生成静态文档

springfox

2.1 Maven 配置

io.springfox
springfox-staticdocs
2.2.2
test

2.2 生成json文件

编写Junit测试,这样在测试环节就可以将api-docs的json数据写入文档,便于下一步生成asciidoc文件。

@WebAppConfiguration@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = DemoBootApplication.class)public class Swagger2MarkupTest { @Autowired private WebApplicationContext context; private MockMvc mockMvc; @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build(); } @Test public void createSpringfoxSwaggerJson() throws Exception { String outputDir = "src/docs/json"; //将api-docs的json数据写入文件 MvcResult mvcResult = this.mockMvc.perform(get("/v2/api-docs") .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andReturn(); MockHttpServletResponse response = mvcResult.getResponse(); String swaggerJson = response.getContentAsString(); Files.createDirectories(Paths.get(outputDir)); try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputDir, "swagger.json"), StandardCharsets.UTF_8)) { writer.write(swaggerJson); } } }

2.3 配置Maven Plugin

配置以下两个插件:

swagger2markup-maven-plugin,该插件将json文件转为asciidoc
asciidoctor-maven-plugin, 该插件将asciidoc转为html/pdf

执行Maven命令 : mvn swagger2markup:convertSwagger2markup process-resources

生成的html文档存储在src\main\resources\META-INF\resources\docs目录下。

启动DemoBootApplication,直接访问

jcenter-snapshots
jcenter
http://oss.jfrog.org/artifactory/oss-snapshot-local/
false
jcenter-releases
jcenter
http://jcenter.bintray.com
io.github.swagger2markup
swagger2markup-maven-plugin
${swagger2markup.plugin.version}
io.github.swagger2markup
swagger2markup-import-files-ext
${swagger2markup.extension.version}
io.github.swagger2markup
swagger2markup
${swagger2markup.version}
${swagger.input}
${generated.asciidoc.directory}
ASCIIDOC
TAGS
generate-sources
convertSwagger2markup
org.asciidoctor
asciidoctor-maven-plugin
1.5.3
org.asciidoctor
asciidoctorj-pdf
1.5.0-alpha.11
org.jruby
jruby-complete
${jruby.version}
org.asciidoctor
asciidoctorj
${asciidoctorj.version}
</

转载于:https://www.cnblogs.com/fengli9998/p/7442559.html

你可能感兴趣的文章
1098 均分纸牌
查看>>
jquery.masonry瀑布流插件的4个使用步骤
查看>>
Apache ab测试工具使用方法(无参、get传参、post传参)
查看>>
Java中如何遍历Map对象的4种方法
查看>>
深度学习和机器学习截然不同?模式识别是最古老的很过时的,机器学习是最基础的初创公司热点,深度学习是有影响力的前沿领域...
查看>>
[认证授权] 2.OAuth2授权(续) & JWT(JSON Web Token)
查看>>
使用 log4j 2记录日志
查看>>
新词发现(一):基于统计
查看>>
从“为什么创业”到“怎么创业”(转)
查看>>
从零开始学习渗透Node.js应用程序
查看>>
Three-js 创建第一个3D场景
查看>>
mysql优化:连接数
查看>>
单例设计模式之安全的懒汉式
查看>>
iOS_20_微博OAuth授权_取得用户授权的accessToken
查看>>
离线用户的灰色头像处理
查看>>
php递归函数return会出现无法正确返回想要值的情况
查看>>
Android Studio之Activity切换动画(三)
查看>>
Bitcoin: A Peer-to-Peer Electronic Cash System(比特币论文翻译)
查看>>
Redis-Redi事务注意事项
查看>>
ffmpeg mediacodec 硬解初探
查看>>