Swagger使用 配置总结(统一 头部信息,content-type配置, 分组 等功能)

时间:2025-03-18 09:04:51
@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; } }