swagger

swagger 是一款常用的生成 api 文档的工具,可以非常好的与 spring boot 结合使用。配合各种注解,可以非常完善的展示 api 的各种信息。不过现在使用多线程获取数据以后,一般都会返回DeferredResult 类,这样的话,在 swagger 中就无法展示返回的信息了,我们可以进行如下的设置来使 DeferredResult 不会影响到展示 api。

如何展示 DeferredResult 的泛型类

展示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@Bean
public Docket createRestApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.fordawn.application.controller"))
            .paths(PathSelectors.any())
            .build()
            .directModelSubstitute(LocalDate.class, String.class)
            .genericModelSubstitutes(DeferredResult.class)
            .alternateTypeRules(newRule(typeResolver.resolve(DeferredResult.class, typeResolver.resolve(ResponseDTO.class, WildcardType.class)), typeResolver.resolve(WildcardType.class)))
            .useDefaultResponseMessages(false)
            .apiInfo(apiInfo());

}

其中关键在于 directModelSubstitute 这个方法,这个方法用于直接使用泛型类,来替换外面的类。

同时 swagger 也提供了 alternateTypeRules 这个方法,这个方法可以更加自由的自定义规则。

swagger 其实非常强大,我们在普通的使用中,只用到了非常小的一部分功能。常用的配置规则就像上面的代码那样,但实际上 swagger 提供了远比这些多的多的配置,同时也提供了mock的模块,可以说是非常全面,等以后可能写一篇文章专门介绍一下。