SpringBoot整合Swagger2

swagger2是一个生成接口文档的工具,十分好用易于前后端测试整合,下面是基于springboot整合swagger2记录

 

引入最新依赖


        io.springfox
        springfox-swagger2
        2.9.2
    

    
        io.springfox
        springfox-swagger-ui
        2.9.2
    

加入配置类



import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2
public class Swagger2Config {

    private static final String splitor = ";";


    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
            .apis(basePackage("com.basepackage1.controller"+splitor+"com.basepackage2.controller"))
//非多包扫描使用RequestHandlerSelectors.basePackage方法代替basePackage方法
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(apiParaInfo());

    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("123")
                .description("123,123")
                .termsOfServiceUrl("")
                .contact("")
                .version("1.0")
                .build();
    }

    private List apiParaInfo(){
        List list=new ArrayList<>();
        ParameterBuilder builder=new ParameterBuilder();
        Parameter token=builder.name("authenticationToken").description("凭证").modelRef(new ModelRef("String")).parameterType("header").required(false).build();
        list.add(token);
        return list;
    }

    /**
     * 重写basePackage方法,使能够实现多包访问,复制贴上去
     *
     * @param basePackage
     * @return com.google.common.base.Predicate
     * @author teavamc
     * @date 2019/1/26
     */
    public static Predicate basePackage(final String basePackage) {
        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
    }

    private static Function, Boolean> handlerPackage(final String basePackage) {
        return input -> {
            // 循环判断匹配
            for (String strPackage : basePackage.split(splitor)) {
                boolean isMatch = input.getPackage().getName().startsWith(strPackage);
                if (isMatch) {
                    return true;
                }
            }
            return false;
        };
    }
    private static Optional> declaringClass(RequestHandler input) {
        return Optional.fromNullable(input.declaringClass());
    }
}

controller层加入注释即可:

常用注解: 
@Api()用于类; 
表示标识这个类是swagger的资源 
@ApiOperation()用于方法; 
表示一个http请求的操作 
@ApiParam()用于方法,参数,字段说明; 
表示对参数的添加元数据(说明或是否必填等) 
@ApiModel()用于类 
表示对类进行说明,用于参数用实体类接收 
@ApiModelProperty()用于方法,字段 
表示对model属性的说明或者数据操作更改 
@ApiIgnore()用于类,方法,方法参数 
表示这个方法或者类被忽略 
@ApiImplicitParam() 用于方法 

  • paramType:参数放在哪个地方
    • header-->请求参数的获取:@RequestHeader
    • query-->请求参数的获取:@RequestParam
    • path(用于restful接口)-->请求参数的获取:@PathVariable
    • body(不常用)
    • form(不常用)
  • name:参数名
  • dataType:参数类型
  • required:参数是否必须传
  • value:参数的意思
  • defaultValue:参数的默认值

表示单独的请求参数 
@ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam

你可能感兴趣的:(SpringBoot整合Swagger2)