天天看點

Springboot整合Swagger看此一篇就夠了

忽略各種曆史、原因。。。。

1.引入項目依賴。

<!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
           

2.建立SwaggerConfig類

目錄結構如下

Springboot整合Swagger看此一篇就夠了

編寫配置内容:

package com.rx.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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @date: 2019/7/15  10:23
 * @author: ruixiang
 * @description: swagger得配置類
 */

@Configuration 
@EnableSwagger2  //開啟Swagger的自動配置
public class SwaggerConfig {

    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select().apis(RequestHandlerSelectors.basePackage("com.rx.controller")) // 根據個人項目配置掃描Controller包
                .paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo(){
    	//Swagger頁面上的個人定制配置
        return new ApiInfoBuilder().title("瑞祥的Swagger2-UI")
                .description("綜合管理Api文檔服務")
                .termsOfServiceUrl("http://swagger.io/")
                .contact(new Contact("小二", "https://blog.csdn.net/weixin_42422694",
                        "[email protected]"))
                .version("1.0")
                .build();
    }

}

           

3.編寫Controller内容測試

這裡不在描述Swagger注解的使用方法,本文隻關心配置問題。

@Api("使用者登陸注冊")
@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserLogin {

    @Autowired
    private UserLoginServcie servcie;


    /**
     * 使用者注冊方法
     * @param user 使用者對象
     * @return
     */
    @ApiOperation("注冊方法")
    @PostMapping(value = "/register")
    public String register(User user){
        try{
            servcie.register(user);
            return "注冊成功!";
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 登入
     * @param user
     * @return
     */
    @ApiOperation("登陸")
    @GetMapping(value = "/login")
    public String login(User user){
        try{
            servcie.register(user);
            return "登入成功!";
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
  } 
  
           

請求swagger位址測試:http://127.0.0.1:8080/swagger-ui.html

Springboot整合Swagger看此一篇就夠了

4.關于整合的錯誤點。

  1. 通路連結控制台提示no mapping for GET/swagger-resources,請檢查建立的SwaggerConfig類是否使用@EnableSwagger2注解。
  2. 通路連結發生404,控制台提示No mapping for GET /swagger-ui.html,添加自定義配置類繼承WebMvcConfigurationSupport重寫addResourceHandlers方法,添加資源控制器:
@Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

    }
           
  1. 連結可以通路,但是通路時控制台報出NumberExceptionL:For input String:“”,報錯的原因是因為swagger2的bug産生的,目前正在修複中,實體類中如果接收類型為Integer類型,使用@ApiModelProperty注解時,如果沒用使用example參數,就會出錯。解決辦法分為兩種

    (1).回退版本為1.X。

    (2).使用example參數指定。

@Data
public class User implements Serializable {

    @ApiModelProperty("姓名")
    private String name;
    @ApiModelProperty(value = "年齡")
    private Integer age;
    @ApiModelProperty("郵箱")
    private String email;
    @ApiModelProperty("密碼")
    private String password;

}
           

5.項目中配置了自定義攔截器之後無法通路

在放行路徑的時候需要把swagger資源路徑放行

@Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

    }
           

繼續閱讀