Swagger项目搭建

Posted YQS_Love

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swagger项目搭建相关的知识,希望对你有一定的参考价值。

一、文章说明

本文由我亲自搭建,搭建过程中出现过各种错误,百度了一大堆教程都没能解决,最后,只能去官网翻资料,加上公司项目的使用结合,终于搭建出来,如果在搭建有新的问题,欢迎与我讨论。
在你看本文章时,有些情况你必须了解清楚,本文章所写的Swager项目的搭建仅在本文所示例的环境,包括不限于JDK版本、依赖库版本等等。还有个前提,需要说明,在配置Swagger项目时,前提是你的Web项目已经可以正常启动且可以访问,如果不能,请先搭建一个可以正常访问的Web应用。另外,本文搭建Swagger不需要下载Swagger的UI资源(依赖jar中已经包含),可省去很多复杂步骤,话不多说,一起来搭建一个自己的Swagger吧!

二、Swagger搭建步骤

环境说明:

  • 一个可以正常访问的Web应用,并且必须是Spring + Spring MVC整合的项目;

  • 必须是Maven构建的项目;

  • 本文使用JDK 1.8;

搭建步骤

  • 在pom.xm中引入Swagger需要的相关依赖
<!-- swagger-springmvc -->
<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>

<!-- 除此之外,我们还需要jackson,我使用的是 2.5.0 版本-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>$jackson.version</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>$jackson.version</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>$jackson.version</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-jaxb-annotations</artifactId>
    <version>$jackson.version</version>
</dependency>
  • 创建Swagger配置类,放到源码同级目录下,配置类具体信息如下,参数的含义不在解释,看看代码应该都能懂
package yao.config;

import com.google.common.base.Predicate;
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;

/**
 * @Author: Yaohong
 * @Date: 2018/6/7
 * @Time: 15:48
 * Copyright © Yao All Rights Reserved.
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig 

    @Bean
    public Docket customImplementation() 
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(true)
                .apiInfo(this.apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(this.paths())
                .build();
    

    protected Predicate<String> paths() 
        return PathSelectors.regex("/((api)|(backend/admin)|(backend/auth)).*");
    

    protected ApiInfo apiInfo() 
        return new ApiInfoBuilder()
                .title("Test Swagger API")
                .description("Swagger API")
                .version("1.0")
                .build();
    


  • 在mvc-dispatcher-servlet.xml(DispatcherServlet的配置文件)中加入有关Swagger有关的配置,同时加入jackson的配置,如下:
<!-- jackson配置 -->
<mvc:annotation-driven>
   <mvc:message-converters>
       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
           <property name="objectMapper" ref="objectMapper"/>
       </bean>
       <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
       <bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
       <bean class="org.springframework.http.converter.StringHttpMessageConverter">
           <constructor-arg value="UTF-8"/>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven>
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
    <property name="failOnEmptyBeans" value="false"/>
</bean>

<!-- 此处填写刚才创建的Swagger配置的引用路径 -->
<bean class="yao.config.SwaggerConfig" id="swagger2Config"/>
  • 使用Swagger的注解标注到接口上,这样就可以生成Swagger文档,代码实现如下(Swagger的注解使用不做解释,具体可查看官方文档),其中,@Api、@ApiOperation、@ApiParam 便是Swagger的注解的使用方法,Story类中也有用到Swagger相关的注解
package yao.swagger.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import yao.swagger.story.dto.Story;
import yao.swagger.story.service.StoryManagerService;

import javax.annotation.Resource;

/**
 * @Author: Yaohong
 * @Date: 2018/6/8
 * @Time: 11:08
 * Copyright © Yao All Rights Reserved.
 */
@Api(tags = "故事接口", description = "故事管理")
@RestController
@RequestMapping("/api/auth/stories")
public class StoryManagerController 

    @Resource
    private StoryManagerService storyManagerService;

    @ApiOperation(value = "根据id获取故事", httpMethod = "GET", response = Story.class)
    @GetMapping(value = "/id")
    public Story getStoryMessageById(@ApiParam("故事id") @PathVariable Long id) 
        return storyManagerService.getStoryById(id);
    

    @ApiOperation(value = "添加故事", httpMethod = "POST", response = Boolean.class)
    @PostMapping(value = "")
    public Boolean addStory(@ApiParam("故事信息") @RequestBody Story story) 
        return storyManagerService.addStory(story);
    


Story类中@ApiModel、@ApiModelProperty是Swagger的注解,@ApiModel用于展现数据模型,@ApiModelProperty则用户展现字段描述,也就是告诉使用者这个字段的作用或含义。最好自己对照Swagger UI一一对应这去了解,才能够真正的理解他们的作用。

package yao.swagger.story.dto;

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * @Author: Yaohong
 * @Date: 2018/6/8
 * @Time: 11:11
 * Copyright © Yao All Rights Reserved.
 */
@ApiModel
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
public class Story 

    @ApiModelProperty("故事id")
    private Long id;

    @ApiModelProperty("故事名称")
    private String name;

    //省略getter、setter、toString方法
  • 上述步骤都做好之后,启动项目,此时控制台会输出项目的访问地址,如下图:

用这个地址拼接Swaggeer的特定地址,就可以看到Swagger的界面了,最终访问地址如下

http://localhost:8080/test-swagger/swagger-ui.html

三、完整配置代码

  • 我的项目结构

  • DispatcherServlet 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:default-servlet-handler/>

    <context:annotation-config/>

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="objectMapper"/>
            </bean>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <context:component-scan base-package="yao.swagger">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
        <property name="failOnEmptyBeans" value="false"/>
    </bean>

    <bean class="yao.config.SwaggerConfig" id="swagger2Config"/>

</beans>
  • SwaggerConfig的代码同步骤二中列出的相同

如果你使用我的方法构建失败,欢迎与我讨论或联系我要项目源码,大家一起进步。

由于小编能力有限,如果文中错误或是纰漏之处,还忘指正,谢谢合作。

以上是关于Swagger项目搭建的主要内容,如果未能解决你的问题,请参考以下文章

当SpringBoot遇上Mybatis和Swagger2,会有多牛逼

SpringBoot项目中利用Swagger搭建REST API 比 Postman香 !

SpringBoot项目中利用Swagger搭建REST API 比 Postman香 !

SpringBoot项目中利用Swagger搭建REST API 比 Postman香 !

springboot项目搭建swagger

SpringBoot 项目配置 Swagger 接口api 搭建 REST