2019独角兽企业重金招聘Python工程师标准>>>

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。
这一次我将从零开始搭建一个工程来演示如何在Spring mvc中整合Swagger生成Restful接口文档。

添加Maven依赖

 <properties><spring.version>4.1.7.RELEASE</spring.version><version.jackson>2.4.4</version.jackson><swagger.version>2.2.2</swagger.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>com.mangofactory</groupId><artifactId>swagger-springmvc</artifactId><version>1.0.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${version.jackson}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${version.jackson}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${version.jackson}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.5.0</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!--petstore是官方的一个demo,加入此依赖是为了稍后参考接口描述的编写--><dependency><groupId>io.springfox</groupId><artifactId>springfox-petstore</artifactId><version>${swagger.version}</version></dependency></dependencies>

添加配置

添加一个ApplicationInitializer类,用于配置DispatchServlet启动:

在工程中的resources文件夹下新建一个spring的文件夹,并新建一个dispatcher-servlet.xml的spring mvc配置文件,添加如下内容:

添加一个SwaggerConfig类,用于配置Swagger接口的说明:

package com.bbd.liangdian.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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;/*** Created by Administrator on 2017/3/6.*/
@EnableSwagger2
@Configuration
public class SwaggerConfig {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.bbd.liangdian.apis")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("量点项目API文档").version("1.0").description("1:量点API,根据分组查找所需要的API.<br /> 2:注意请求的方法定义.").build();}
}

新建一个GroupController,并编写测试方法:

    package yay.apidoc.controller;import io.swagger.annotations.*;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import yay.apidoc.model.UamGroup;import java.util.LinkedList;import java.util.List;/*** Created by yuananyun on 2015/11/23.*/@Controller@RequestMapping(value = "/group", produces = {"application/json;charset=UTF-8"})@Api(value = "/group", description = "群组的相关操作")public class GroupController {@RequestMapping(value = "addGroup", method = RequestMethod.PUT)@ApiOperation(notes = "addGroup", httpMethod = "POST", value = "添加一个新的群组")@ApiResponses(value = {@ApiResponse(code = 405, message = "invalid input")})public UamGroup addGroup(@ApiParam(required = true, value = "group data") @RequestBody UamGroup group) {return group;}@RequestMapping(value = "getAccessibleGroups", method = RequestMethod.GET)@ApiOperation(notes = "getAccessibleGroups", httpMethod = "GET", value = "获取我可以访问的群组的列表")public List<UamGroup> getAccessibleGroups() {UamGroup group1 = new UamGroup();group1.setGroupId("1");group1.setName("testGroup1");UamGroup group2 = new UamGroup();group2.setGroupId("2");group2.setName("testGroup2");List<UamGroup> groupList = new LinkedList<UamGroup>();groupList.add(group1);groupList.add(group2);return groupList;}}

其中UamGroup的定义如下:

    package yay.apidoc.model;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;/*** 群组*/@ApiModelpublic class UamGroup {/*** 编号*/@ApiModelProperty(value = "群组的Id", required = true)private String groupId;/*** 名称*/@ApiModelProperty(value = "群组的名称", required = true)private String name;/*** 群组图标*/@ApiModelProperty(value = "群组的头像", required = false)private String icon;public String getGroupId() {return groupId;}public void setGroupId(String groupId) {this.groupId = groupId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}}

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><display-name>Archetype Created Web Application</display-name><context-param><!-- 配置 spring 容器启动的配置文件的路径 --><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><context-param><param-name>logbackConfigLocation</param-name><param-value>classpath:logback.xml</param-value></context-param><listener><listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class></listener><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置编码过滤器 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置tomcat启动时 启动SpringMVC --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 配置swagger-ui --><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/swagger-ui.html</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><error-page><error-code>404</error-code><location>/index.html</location></error-page>
</web-app>

好,现在我们启动tomcat来看看效果: localhost:8080/swagger-ui.html

解决中文乱码

可以看到,我们写在方法上说明居然成了乱码,为了解决这个问题,我们新建一个转换类:

    package yay.apidoc.converter;import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.databind.*;import org.springframework.http.HttpInputMessage;import org.springframework.http.converter.HttpMessageNotReadableException;import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;import java.io.IOException;import java.text.SimpleDateFormat;/*** Created by yuananyun on 2015/11/23.*/public class MappingJacksonHttpMessageConverterEx extends MappingJackson2HttpMessageConverter {private ObjectMapper objectMapper = new ObjectMapper();public MappingJacksonHttpMessageConverterEx() {super();DeserializationConfig deserializationConfig = objectMapper.getDeserializationConfig().without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);objectMapper.setConfig(deserializationConfig);// Configure serializationSerializationConfig serializationConfig = objectMapper.getSerializationConfig().without(SerializationFeature.FAIL_ON_EMPTY_BEANS);//serializationConfig.withDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));objectMapper.setConfig(serializationConfig);objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);//        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS,true);setObjectMapper(objectMapper);}@Overrideprotected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage)throws IOException, HttpMessageNotReadableException {JavaType javaType = getJavaType(null, clazz);return this.objectMapper.readValue(inputMessage.getBody(), javaType);}}

然后修改dispatcher-servlet.xml中的mvc:annotation-driven配置节:

        <!-- Standard xml based mvc config--><mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><bean class="yay.apidoc.converter.MappingJacksonHttpMessageConverterEx"/><bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/></mvc:message-converters></mvc:annotation-driven>

我们再来看看效果: localhost:8080/swagger-ui.html

转载于:https://my.oschina.net/u/1867229/blog/885525

Swagger+Spring mvc生成Restful接口文档相关推荐

  1. Spring Boot 集成 Swagger 生成 RESTful API 文档

    原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...

  2. SpringBoot集成swagger生成在线接口文档

    SpringBoot集成swagger生成在线接口文档 集成maven依赖 <dependency><groupId>io.springfox</groupId>& ...

  3. Laravel使用swagger PHP生成api接口文档

    Laravel使用swagger PHP生成api接口文档 Swagger集接口文档和测试于一体,就类比将postman和showdoc的结合体 首先要先安装基于laravel5的swagger包 地 ...

  4. springboot(05)整合 Swagger3 生成 API 接口文档

    Spring Boot 集成 Swagger3 Swagger是一种开源的API文档工具,它可以自动生成RESTful API文档,让开发者可以更容易地理解和使用API.使用Swagger可以提高开发 ...

  5. restful 接口文档_第 16 篇:别再手动管理接口文档了

    作者:HelloGitHub-追梦人物 大多数情况下,开发的接口都不是给开发这个接口的人用的,所以如果没有接口文档,别人就无法有哪些接口可以调用,即使知道了接口的 URL,也很难知道接口需要哪些参数, ...

  6. 如何自动生成 API 接口文档 - 一份详细指南

    本篇文章详细教你如何使用 Apifox 的 IDEA 插件实现自动生成接口代码.好处简单总结有以下几点: 自动生成接口文档: 不用手写,一键点击就可以自动生成文档,当有更新时,点击一下就可以自动同步接 ...

  7. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档

    今天感觉效率真的很低= =各个层面的,apk发布到现场发现出现了问题,所以一个下午都在忙着解决现场出现的问题,领导一直打电话询问进度,午觉也没有睡所以今天预计的很多计划都处于停滞状态,像昨天规划的今天 ...

  8. python生成api文档_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  9. python api接口生成_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

最新文章

  1. 使用System.IO.Packaging.Package进行文件压缩所产生的问题
  2. 服务器功率一般多少_单机柜供电能力提升后,选择1U服务器还是2U服务器?
  3. TabControl控件和TabPage
  4. Vue.js 2.x render 渲染函数 JSX
  5. 硒品牌谋定功能性农业-农业大健康·万祥军:践行健康中国
  6. [导入]C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式).zip(9.84 MB)...
  7. 乡村野生草药_官方野生蝇群流口水分数
  8. java 计算信度,11.5.2 评分者信度实例分析
  9. 重磅!DigiX极客校园大赛今日启动,超百万巨奖激励AI精英!
  10. 第二百六十四节,Tornado框架-基于正则的动态路由映射分页数据获取计算
  11. N个结点不同结构的二叉树个数
  12. js 求数组中最小值
  13. 微信小程序--几个常用标签
  14. 一名大学毕业生的反思《上》
  15. Windows7Windows10兼容红色警戒
  16. 2021年全球及中国酒店行业发展现状及竞争格局分析,全球酒店行业景气度大幅回暖「图」
  17. 笔记本 安装服务器系统,笔记本电脑安装Windows Server 2016之我见
  18. git push 失败问题如何解决
  19. 自制ST-Link V2.1教程(SWD调试+虚拟串口+虚拟U盘)
  20. 用Python做个微信自动回复机器人

热门文章

  1. java猜字母讲解_java_猜字母游戏
  2. 六年级下册百分数计算题_小学六年级数学期末考,题量较大,出题全面、灵活...
  3. Django(模板语言-自定义filter和simple_tag)
  4. 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前20项之和。...
  5. 启动Tomcat 7一闪而过的问题
  6. HDU2546_用01背包做
  7. 这 4 款实用小工具,能让你的电脑变得好用又骚气
  8. Django打造大型企业官网-项目部署
  9. 0 uC/OS 系统精讲索引
  10. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】