Swagger使用 配置总结(统一 头部信息,content-type配置, 分组 等功能)
@EnableSwagger2
@Configuration
@Profile({"develop", "test"})
public class Swagger2Config implements WebMvcConfigurer {
//配置拦截器不拦截的路径, 根目录以及其他特定开发功能路径
@Bean(name = "excludePath")
public List<String> swaggerPathPattern() {
return Lists.newArrayList("/swagger-resources/**", "/webjars/**", "/v2/**", "//**", "/api-docs");
}
//配置swagger信息的ApiInfo
private ApiInfo apiInfo(){
//作者的联系方式
return new ApiInfoBuilder()
.title("aaaak hello")
.description("Restful API")
.contact(new Contact("aaaak", "", "1111111@"))
.version("1.0")
.build();
}
//配置content type
private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES =
new HashSet<String>(Arrays.asList("application/json","application/xml"));
// 根据 docket 配置多个 分组
@Bean()
public Docket baseDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.consumes(DEFAULT_PRODUCES_AND_CONSUMES)
.produces(DEFAULT_PRODUCES_AND_CONSUMES)
.globalOperationParameters(globalOperationParameters())
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(Controller.class))//根据注解Controller 找接口
.paths(PathSelectors.any())//全路径的 接口
.build();
}
@Bean()
public Docket docket2() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.consumes(DEFAULT_PRODUCES_AND_CONSUMES)
.produces(DEFAULT_PRODUCES_AND_CONSUMES)
.ignoredParameterTypes(Error.class)// 忽略 指定参数
.groupName("调查问卷模块") //分组
.globalOperationParameters(globalOperationParameters())
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.ant("/api/**"))//筛选指定路径下的 接口到指定分组
.build();
}
//配置请求 接口文档路径
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("").addResourceLocations("classpath:/META-INF/resources/").setCacheControl(CacheControl.noCache());
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.setCacheControl(CacheControl.noCache());
}
/**
* 所有请求都添加的统一参数(或者头)信息
* @return
*/
private List<Parameter> globalOperationParameters() {
List<Parameter> pars = new ArrayList<>();
pars.add(new ParameterBuilder().name("_Device").defaultValue("861925033630951").description("设备唯一标识")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().name("_Hardware").defaultValue("HUAWEI_JDN-AL00").description("设备号")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_OS").defaultValue("Android-23").description("平台类型")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_Channel").defaultValue("rtm").description("请求渠道")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_Timestamp").defaultValue(String.valueOf(System.currentTimeMillis())).description("时间戳")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_AppName").defaultValue("").description("客户端名字")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_AppVersion").defaultValue("4060").description("客户端版本")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().name("_User").defaultValue("22525").description("请求医生id")
.parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().name("_Hospital").defaultValue("12").description("医院id")
.parameterType("header").modelRef(new ModelRef("string")).build());
return pars;
}
}