@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
方法创建标签名称以匹配默认值。
我在我的 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
方法创建标签名称以匹配默认值。