【问题标题】:Custom application class setup for Swagger with a Jersey ResourceConfig使用 Jersey ResourceConfig 为 Swagger 设置自定义应用程序类
【发布时间】:2018-08-04 10:35:36
【问题描述】:

我正在按照 Jersey 2.X 项目设置指南 (https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5#using-a-custom-application-subclass) 执行步骤。我遇到了“自定义应用程序”子类的问题,它提供了以下示例代码:

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

        //resources.add(FirstResource.class);
        //resources.add(SecondResource.class);
        //...

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

        return resources;
    }
}

我们的项目与上面提供的示例有所不同,因为它扩展了 Jersey ResourceConfig 类,而不是直接扩展 Application 类。问题是 ResourceConfig 类本身覆盖了 getClasses() 方法并将其声明为 final。

你知道有什么办法可以绕过这个限制吗?

我们的代码:

@ApplicationPath("/")
public class testProj extends ResourceConfig {
    public testProj (){
        property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true");

    }
}

请帮我提供swagger的步骤/示例示例/示例代码?

提前致谢。

【问题讨论】:

    标签: java rest jax-rs swagger jersey-2.0


    【解决方案1】:

    我在我的 Jersey ResourceConfig 中使用了扩展的 BeanConfig 类:

    public class ExtBeanConfig extends BeanConfig {
    
        Set<Class<?>> resources = new HashSet<Class<?>>();
    
        public ExtBeanConfig(Set<Class<?>> resources) {
            super();
            if (resources != null) {
                this.resources = resources;
            }
        }
    
        @Override
        public Set<Class<?>> classes() {
            Set<Class<?>> superClasses = super.classes();
            superClasses.addAll(resources);
            return superClasses;
        }
    }   
    

    这就是我在 ResourceConfig 中配置它的方式(myClasses 是一组带有 Swagger 注释的类):

    ExtBeanConfig beanConfig = new ExtBeanConfig(myClasses);
    beanConfig.setVersion("1.0.0");
    beanConfig.setSchemes(new String[]{"http, https"});
    beanConfig.setBasePath("/api");
    beanConfig.setScan(true);
    

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多