1. 程式人生 > >Swagger2與springmvc整合

Swagger2與springmvc整合

首先,先構建一個spingmvc的maven工程,這裡就不寫程式碼了。

然後在pom.xml中新增以下依賴:

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.4</version>
        </dependency>

我們來看下我們引入的springfox-swagger-ui-2.6.1.jar:

 我們可以看到swagger2的靜態檔案已經被封裝在jar包中了,根據這裡,我們在spring-mvc.xml中來配置我們的檢視解析器:


    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name = "prefix" value="/META-INF/resources/"></property>
        <property name = "suffix" value = ""></property>
    </bean>

 接下來,我們建立swagger2的配置檔案,和測試的controller

@Configuration        //讓Spring來載入該類配置
@EnableWebMvc        //啟用Mvc,非springboot框架需要引入註解@EnableWebMvc
@EnableSwagger2        //啟用Swagger2
public class Swagger2Config {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo()).select()
                //掃描指定包中的swagger註解
                //.apis(RequestHandlerSelectors.basePackage("com.xia.controller"))
                //掃描所有有註解的api,用這種方式更靈活
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("基礎平臺 RESTful APIs")
                .description("基礎平臺 RESTful 風格的介面文件,內容詳細極大的減少了前後端的溝通成本,同時確保程式碼與文件保持高度一致,極大的減少維護文件的時間。")
                .termsOfServiceUrl("http://xiachengwei5.coding.me")
                .contact("mooc")
                //.license("個人部落格")
                //.licenseUrl("http://xiachengwei5.coding.me")
                .version("0.0.1")
                .build();
    }
}
    /**
     * @Api 這個註解分模組的,記得要用tags
     * @author dumingwei
     *
     */
    @Api(tags="個人業務")
    @RestController
    @RequestMapping("/person")
    public class PersonController {
    	/**
    	 * @ApiOperation 這個註解是指該方法是用來做什麼的,一定要加上httpMethod,否則會出現一堆
    	 * @param userVo
    	 * @return
    	 */
    	@RequestMapping(value="/getPerson",method= RequestMethod.GET)
        @ApiOperation(httpMethod = "GET", value = "個人資訊", produces = MediaType.APPLICATION_JSON_VALUE)
        public @ResponseBody Person getPersons() {
            Person person = new Person();
            person.setFirstName("fname");
            person.setLastName("lname");
            person.setAge(37);
            person.setDeptName("dept");
            return person;
        }
    }
}

開啟http://localhost:8080/${projectName}/swagger-ui.html.這裡的projectName就是你的工程名,成功則出現下圖所示: