Swagger覆盖Path-Annotations

时间:2015-11-14 15:38:33

标签: jax-rs swagger

我只是摇摇晃晃地产生了一个有效的swagger.json。 我使用Application-config方法配置了swagger。 但是,只要我覆盖了getClasses-Method以添加swagger资源,我的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()返回空集。 我的项目中有太多资源,我不想手动添加。

有没有什么方法可以不招惹我以前的配置?

谢谢!

1 个答案:

答案 0 :(得分: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 ] ),但您是否尝试过根本不注册它们?从理论上讲,类路径扫描应该提取它。

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