gpt4 book ai didi

rest - 无法以编程方式使用嵌入式码头配置 Swagger

转载 作者:行者123 更新时间:2023-12-03 17:50:13 28 4
gpt4 key购买 nike

我一直在尝试使用 swagger 来记录我的 jaxrs-resteasy 服务。我想在嵌入式码头服务器设置中以编程方式配置它。这是我的资源、服务器和应用程序类。
我可以访问 http://127.0.0.1:9091/rest/hello并验证我的休息服务是否正常工作..但是当我尝试访问 http://127.0.0.1:9091/rest/api-docs 时我不能让它工作,但看到一个 404 没有找到。
有人可以指出我在配置 Swagger 时可能做错了什么。

资源文件

@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();
}

}

服务器
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();
}

}
}

服务文件
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;
}
}

最佳答案

我知道这是一个老问题,但这可能对某人有所帮助,所以就这样吧。

我不确定你使用的是什么版本,但这与我在几个不同版本的 Swagger 中不止一次遇到的问题相匹配。我注意到的一件事是您没有在任何地方注册 ApiListingResourceJSON , ApiDeclarationProvider , 或 ResourceListingProvider Swagger 附带的类。这些类是提供 /api-docs/ 所必需的。资源。

此外,典型配置对我不起作用。使用 BeanConfig只产生一个空的 JSON Swagger 元素。如果发生这种情况,我通过创建自定义配置解决了这个问题。

public class CustomSwaggerConfig extends HttpServlet {
public static final String PACKAGE = "com.shorecg.eureka";

@Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
ConfigFactory.setConfig(new WebXMLReader(servletConfig));
ReflectiveJaxrsScanner scanner = new ReflectiveJaxrsScanner();
scanner.setResourcePackage(PACKAGE);
ScannerFactory.setScanner(scanner);
ClassReaders.setReader(new DefaultJaxrsApiReader());
}

class ReflectiveJaxrsScanner implements JaxrsScanner {
private String resourcePackage;

public String getResourcePackage() {
return resourcePackage;
}

public ReflectiveJaxrsScanner setResourcePackage(String resourcePackage) {
this.resourcePackage = resourcePackage;
return this;
}

@Override
public List<Class<?>> classes() {
Reflections reflections = new Reflections(resourcePackage);
Set<Class<?>> clsses = reflections.getTypesAnnotatedWith(Api.class);
return JavaConversions.asScalaSet(clsses).toList();
}

@Override
public List<Class<?>> classesFromContext(Application aplctn, ServletConfig sc) {
return classes();
}

}
}

这不是一个完美的解决方案。例如,如果您有未注册的资源,如果您使用此自定义 swagger 配置,它们仍会显示在 Swagger 中。然而,它确实让我意识到 swagger 确实有效。希望这可以帮助。

关于rest - 无法以编程方式使用嵌入式码头配置 Swagger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640558/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com