java – Swagger ReaderListener永远不会在扫描过程中被拾取

我在与Swagger的resoure类相同的包中实现了一个ReaderListener.但是,生成Swagger文件时,从不使用此类.我尝试添加swagger.setBasePath(“/ empty”); to AfterScan()只是为了看它是否被调用,检查它是否改变了基本路径,但事实并非如此.关于我需要做些什么来确保在Swagger的扫描过程中选择这个课程的任何想法?顺便说一下,我正在使用Maven构建项目并安装生成的RPM,如果这有所不同的话.

@io.swagger.annotations.SwaggerDefinition
public class SwaggerDefinition implements ReaderListener {
    @Override
    public void beforeScan(Reader reader, Scanner scanner) {
    }

    @Override
    public void afterScan(Reader reader, Scanner scanner) {
        final Model model = new ModelImpl()
            .name("EntryContainer")
            .type("Object")
            .required("entry")
            .property("entry", new ObjectProperty());
        model.setReference("#/definitions/entry");
        final Model model1 = new ModelImpl()
            .name("Entry")
            .type("Object")
            .property("first_name", new StringProperty())
            .property("last_name", new StringProperty())
            .required("first_name")
            .required("last_name");
        Map<String, Model> defs = new HashMap<>();
        definitions.put("EntryContainer", model);
        definitions.put("Entry", model1);
        swagger.setDefinitions(definitions);
    }
}

最佳答案 虽然这是一个老问题,但我想发布一些对我有用的东西.

这是我的ReaderListener实现.

import io.swagger.annotations.SwaggerDefinition;
import io.swagger.jaxrs.Reader;
import io.swagger.jaxrs.config.ReaderListener;
import io.swagger.models.Swagger;

@SwaggerDefinition
public class SwaggerBasePathModifier implements ReaderListener {
    @Override
    public void beforeScan(Reader reader, Swagger swagger) {

    }

    @Override
    public void afterScan(Reader reader, Swagger swagger) {
        // This is the purpose of my ReaderListener
        // Yours can be different
        swagger.setBasePath("/web-context/rest"); //<--set new base path
    }
}

在我的情况下,Swagger没有扫描SwaggerBasePathModifier类.为了解决这个问题,我必须将其显式添加为我的其余应用程序初始化时要扫描的类之一.请参阅代码中的注释.

classes.add(SwaggerBasePathModifier.class);

这是完整的课程

@ApplicationPath("rest")
public class MyRESTApp extends Application {
    public MyRESTApp() {
    }

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        // api end points
        classes.add(MyAPIResource.class);
        // swagger related
        classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
        classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
        classes.add(SwaggerBasePathModifier.class);//<-- This does the trick

        return classes;
    }
}

这有助于我解决这个问题.希望这会有所帮助.

点赞