我在与Swagger的resoure类相同的包中实现了ReaderListener
。但是,生成Swagger文件时,从不使用此类。我尝试将swagger.setBasePath("/empty");
添加到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);
}
}
答案 0 :(得分:1)
即使这是一个老问题,我还想发布一些对我有用的内容。
这是我的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;
}
}
这有助于我解决这个问题。希望这会有所帮助。
答案 1 :(得分:0)
我是一个Spring Bean,我用@Component注释。确保Spring正在加载此类或您正在使用的任何容器。