@Tag 中的 springfox-swagger2 描述不被尊重

spingfox-swagger2 description in @Tag not honored

我在我的 Spring MVC 项目中使用以下版本的 springfox-swagger2 库:

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>

我想根据 swagger 文档使用以下内容向我的 REST 控制器添加描述:

@RestController
@RequestMapping("/admin")
@Api(tags = {"Admin API"})
@SwaggerDefinition(tags = {
    @Tag(name = "Admin API", description = "Admin interface to manage users")
})
public class AdminController {

然而tags中的description并没有体现在swagger-ui.

内容如下:

管理员API管理员控制器

而不是:

Admin API 管理用户的管理界面

我错过了什么?

我发现我必须配置摘要才能在生成的文档中查看标签描述:

@Bean
public Docket docket() {
    return new Docket(SWAGGER_2)
        ...
        .tags(
            new Tag("Admin API", "Admin interface to manage users")
        );
}

这是一个从控制器获取注解的版本(我发现把东西放在控制器上更好):

@Bean
public Docket docket(ApplicationContext applicationContext) {
    List<Tag> tags = applicationContext.getBeansWithAnnotation(SwaggerDefinition.class).entrySet()
            .stream()
            .flatMap(entry -> Optional.of(entry.getValue().getClass().getAnnotation(SwaggerDefinition.class))
                    .map(swaggerDefinition -> Stream.of(swaggerDefinition.tags())
                            .map(tag -> {
                                String name = tag.name();
                                if (name.isEmpty()) {
                                    name = Paths.splitCamelCase(entry.getKey(), "-").toLowerCase();

                                }
                                return new Tag(name, tag.description());
                            }))
                    .orElse(Stream.empty()))
            .collect(Collectors.toList());

    return new Docket(DocumentationType.SWAGGER_2)
    ...
            .tags(tags.get(0), tags.stream().skip(1).toArray(Tag[]::new));

}

这将抓取任何用 SwaggerDefinition 注释的 bean,因此如果它抓取额外的东西,可能需要进行调整。我最初使用 getBeansOfType.

注释不需要指定标签名称。像这样:

@SwaggerDefinition(tags = {
    @Tag(name = "", description = "Admin interface to manage users")
})
public class AdminController {

我使用 Paths.splitCamelCase 方法创建标签名称以匹配默认值。