Swagger 覆盖 Path-Annotations

Swagger overrides Path-Annotations

我只是大摇大摆地生成了一个有效的 swagger.json。 我使用 Application-config 方法配置了 swagger。 但是,一旦我重写 getClasses-Method 以添加 swagger 资源,我的 JAX-RS 路径注释 类 就会停止工作。 该方法看起来像这样

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new HashSet<>();

    resources.add(io.swagger.jaxrs.listing.ApiListingResource.class);
    resources.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);

    return resources;
}

并调用 super.getClasses() returns 是空集。 我的项目中有太多资源,我不想手动添加。

swagger 有什么方法不会影响我之前的配置吗?

谢谢!

您可以使用 javax.ws.rs.core.Feature。只需通过回调的 FeatureContext 注册 classes。使用 @Provider 注释特征将通过扫描注册它。

@Provider
public class SwaggerFeature implements Feature {

    @Override
    public boolean configure(FeatureContext context) {
        context.register(ApiListingResource.class);
        context.register(SwaggerSerializers.class);
        return true;
    }
}

但请注意,如果应用程序已经通过 class 路径扫描注册资源和提供者,我想它也应该选择 Swagger classes,因为它们用 @Path[1]@Provider[2 ]。这些是 class-path 扫描查找的注释。

我自己没试过(我停止使用class-路径扫描[3]),但是您是否尝试过根本不注册它们?理论上,class-路径扫描应该能找到它。

1. io.swagger.jaxrs.listing.ApiListingResource
2. io.swagger.jaxrs.listing.SwaggerSerializers
3. When to Use JAX-RS Class-path Scanning Mechanism