Ich habe versucht, prolong zu verwenden, um meinen Jaxrs-Restasy-Dienst zu dokumentieren. Ich möchte dies programmgesteuert in einer eingebetteten Jetty-Server-Einstellung konfigurieren. Hier sind meine Ressourcen-, Server- und Anwendungsklassen. Ich kann auf http://127.0.0.1:9091/rest/hello
zugreifen und überprüfen, dass mein Rest Service funktioniert .. aber wenn ich versuche, auf http://127.0.0.1:9091/rest/api-docs
zuzugreifen, kann ich es nicht funktionieren, aber sehen Sie stattdessen eine 404 nicht gefunden. Kann mir jemand zeigen, was ich beim Konfigurieren von Swagger falsch machen könnte?Konnte Swagger mit Embedded Jetty programmgesteuert nicht konfigurieren
Ressourcendatei
@Api(value = "/", description = "Index")
@Path("/")
public class Index {
@GET
@ApiOperation(
value = "call Index",
response = Response.class,
responseContainer = "Object"
)
@Produces("text/html")
public Response index() throws URISyntaxException {
File f = new File(System.getProperty("user.dir")+"/index.html");
String mt = new MimetypesFileTypeMap().getContentType(f);
return Response.ok(f, mt).build();
}
@GET
@Path("/hello")
@ApiOperation(
value = "hello Get",
response = Response.class,
responseContainer = "Object"
)
public Response helloGet() {
return Response.status(200).entity("HTTP GET method called").build();
}
}
Server
public class JettyServer {
public static void main(String[] args) throws IOException {
Server server = new Server(9091);
final HandlerList handlers = new HandlerList();
ServletHolder h = new ServletHolder(new HttpServletDispatcher());
h.setInitParameter("javax.ws.rs.Application", "com.all.MyServices");
// h.setInitOrder(1);
ServletContextHandler restContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
restContextHandler.setContextPath("/rest");
restContextHandler.addServlet(h, "/*");
handlers.addHandler(restContextHandler);
server.setHandler(handlers);
try {
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Datei Service
public class MyServices extends Application {
private static Set<Index> services = new HashSet<>();
public MyServices() {
System.out.println("Initializing Swagger BeanConfig");
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("1.0");
beanConfig.setResourcePackage(Index.class.getPackage().getName());
beanConfig.setBasePath("http://localhost:9091/api");
beanConfig.setDescription("My RESTful services");
beanConfig.setTitle("My RESTful API");
beanConfig.setScan(true);
services.add(new Index());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public Set getSingletons() {
return services;
}
@SuppressWarnings("rawtypes")
public static Set getServices() {
return services;
}
}
Haben Sie jemals eine Lösung gefunden? Ich habe ein ähnliches Problem, immer eine 404, wo ich denke, dass die Swagger-Info sein sollte. – medloh
Nur eine Vermutung: Haben Sie den Basispfad in Ihrer BeanConfig korrekt konfiguriert? Sie versuchen, auf http: // localhost: 9091/rest/api-docs zuzugreifen, aber Ihr Basispfad ist http: // localhost: 9091/api. In meiner Bootstrap-Klasse für Swagger habe ich auch den API-Pfad (der gleiche Wert wie BasePath) konfiguriert, in meinem Fall: ConfigFactory.config(). SetApiPath ("myPath"); – tareq