【问题标题】:Swagger overrides Path-AnnotationsSwagger 覆盖路径注释
【发布时间】:2015-11-14 15:38:32
【问题描述】:

我刚刚大摇大摆地生成了一个有效的 swagger.json。 我使用 Application-config 方法配置了招摇。 但是,一旦我覆盖 getClasses-Method 以添加招摇资源,我的 JAX-RS Path-annotated 类就会停止工作。 方法是这样的

@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() 返回一个空集。 我的项目中有太多资源,我不想手动添加。

swagger 有什么办法不弄乱我之前的配置吗?

谢谢!

【问题讨论】:

    标签: jax-rs swagger


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢,我现在一切正常!删除#getClasses 就成功了,但是,我现在正在注册每个类,正如你所建议的那样,这似乎是更安全的方法。
    猜你喜欢
    • 2019-09-11
    • 2018-07-16
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多