1. 程式人生 > >Springboot+Maven+swagger2.7整合開發

Springboot+Maven+swagger2.7整合開發

Springboot+swagger2.7整合開發

本篇文章是介紹最新的springboot和swagger2.7整合開發和2.0稍微有一些出入:

  • **
  • Springboot整合環境配置
  • Swagger2.7整合
  • 整合測試

Springboot整合環境配置

Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。 ——

[ INFO深入學習]

程式碼塊

開發Spring Boot應用,例如:

@RestController
class App {
  @RequestMapping("/")
  String home() {
    "hello"
  }
}

引入SpringBoot的JAR檔案.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version
>
1.2.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId
>
<artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>

編制Main.java


import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
import org.springframework.web.bind.annotation.PathVariable;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  

@RestController  
@EnableAutoConfiguration  
public class Example {  

    @RequestMapping("/")  
    String index() {  
        return "Hello World!";  
    }  

    @RequestMapping("/index/{sayHello}")  
    String index(@PathVariable String sayHello) {  
        return "Hello "+sayHello+"!!!";  
    }  
}  

編寫application.properties

application.hellowmsg=Hello World
server.port=8081 #埠
logging.level.=INFO

編制Application.java

@EnableScheduling
@EnableTransactionManagement
@SpringBootApplication
public class App extends WebMvcConfigurerAdapter {
    public static void main(String[] args) throws Exception {
        SpringApplication app = new SpringApplication(App.class);
        app.setWebEnvironment(true);
        app.setShowBanner(false);
        Set<Object> set = new HashSet<Object>();
        // set.add("classpath:applicationContext.xml");
        app.setSources(set);
        app.run(args);
    }

執行Application.java
看到

2017-11-15 16:14:08.391  INFO 12524 --- [           main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
2017-11-15 16:14:08.607  INFO 12524 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)

並沒有出錯,表示成功,直接訪問http://localhost:8081/,輸出Hello World!

Swagger2.7整合

加入maven的倉庫檔案

<!--swagger2 integration -->
    <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>

建立SwaggerConfig的配置檔案

import static com.google.common.collect.Lists.newArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.classmate.TypeResolver;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
@ConfigurationProperties
public class SwaggerConfig {

    @Value("${swagger.version}")
    private String version;
    @Autowired
    private TypeResolver typeResolver;

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.hp.ctrl"))
                .paths(PathSelectors.any()).build().apiInfo(apiInfo());
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("構建RESTful APIs").description("更多請關注:http://my.csdn.net/elvishehai")
                .license("The Apache License, Version 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html").termsOfServiceUrl("http://my.csdn.net/elvishehai")
                .version(version).build();
    }
}

下一步寫REST的COTR

@Api(value = "API - SMSController")
@RestController
public class SmsController {
@ApiOperation(value = "測試服務", notes = "測試服務")
    @ApiImplicitParam(name = "smsRequestBean", value = "使用者詳細實體SmsRequestBean", required = true, dataType = "SmsRequestBean")
    @RequestMapping(value = "/post", method = RequestMethod.POST)
    public String post(@RequestBody SmsRequestBean smsRequestBean) {
        return "服務測試成功,你輸入的引數為:" + smsRequestBean.getApplicationId();
    }

    @ApiOperation(value = "測試服務", notes = "測試服務", consumes = "application/json", produces = "application/json")
    @RequestMapping(value = "/test/{input}", method = RequestMethod.GET)
    @ResponseBody
    public String getUser(@PathVariable("input") String input) {

        return "服務測試成功,你輸入的引數為:" + input;
    }
}

swagger通過註解表明該介面會生成文件,包括介面名、請求方法、引數、返回資訊的等等。
@Api:修飾整個類,描述Controller的作用
@ApiOperation:描述一個類的一個方法,或者說一個介面
@ApiParam:單個引數描述
@ApiModel:用物件來接收引數
@ApiProperty:用物件接收引數時,描述物件的一個欄位
@ApiResponse:HTTP響應其中1個描述
@ApiResponses:HTTP響應整體描述
@ApiIgnore:使用該註解忽略這個API
@ApiError :發生錯誤返回的資訊
@ApiParamImplicitL:一個請求引數
@ApiParamsImplicit 多個請求引數
執行application.java
在瀏覽器上輸入http://localhost:8081/swagger-ui.html
這裡寫圖片描述
這裡寫圖片描述
可以看到上面,測試就成功。
在上圖請求的頁面中,我們看到user的Value是個輸入框?是的,Swagger除了檢視介面功能外,還提供了除錯測試功能,我們可以點選上圖中右側的Model Schema(黃色區域:它指明瞭User的資料結構),此時Value中就有了user物件的模板,我們只需要稍適修改,點選下方“Try it out!”按鈕,即可完成了一次請求呼叫!
此時,你也可以通過幾個GET請求來驗證之前的POST請求是否正確。
相比為這些介面編寫文件的工作,我們增加的配置內容是非常少而且精簡的,對於原有程式碼的侵入也在忍受範圍之內。因此,在構建RESTful API的同時,加入swagger來對API文件進行管理,是個不錯的選擇。

+參考資訊
http://swagger.io/ Swagger官方網站