使用validatorUrl作为null后,Swagger UI仍然显示错误

时间:2017-07-11 04:07:24

标签: java swagger dropwizard

虽然如果我要描述的情况类似于 Swagger UI Displays but I get an "ERROR" indicator。一切正常,我的路线列出正确,但显示错误,所有类似线程上建议的解决方案与设置validationUrl=null有关。

我使用以下依赖项 -

<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-core</artifactId>
    <version>1.1.2</version>
</dependency>
<dependency>
    <groupId>io.federecio</groupId>
    <artifactId>dropwizard-swagger</artifactId>
    <version>0.7.0</version>
</dependency>

这就是我的注册码 -

@Override
public void initialize(Bootstrap<CustomServiceConfig> bootstrap) {
    bootstrap.addBundle(new SwaggerBundle<CustomServiceConfig>() {

        @Override
        protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(
                CustomServiceConfig customServiceConfig) {
            return customServiceConfig.getSwaggerBundleConfiguration();
        }
    });
}

config.yml 中的这些配置是 -

swagger:
  title: Custom Service
  description: APIs for Test
  contact: me@alias.com
  uriPrefix: /
  resourcePackage: com.x.y.package

我已尝试更新上述.yml中的SwaggerBundleConfiguration以添加

validatorUrl=null

但这似乎也没有解决问题。怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

validatorURL: null插入swagger ui的构造函数中必须在swagger index.html文件中进行,而不是Dropwizard yaml配置文件[see the SO post you referenced]

所以你有几个选择,但是开始我不会推荐dropwizard-swagger包,因为它似乎远远落后于Dropwizard本身。根据{{​​3}},它只支持Dropwizard 0.8和swagger-ui 2.4。 Dropwizard是1.x和swagger-ui 3.x.

选项1

如果您取消dropwizard-swagger lib,可以将swagger-ui资产直接放入资源目录下的项目中,并将AssetBundle添加到Dropwizard应用程序中。 version documentation on its page。您需要的静态html全部在This bundle allows serving of static content on your classpath中(即将其复制到dropwizard项目中的/ resources)。

你有

之类的东西
@Override
public void initialize(Bootstrap<CustomServiceConfig> bootstrap) {
    bootstrap.addBundle(new AssetsBundle("/assets/swagger", "/swagger", "index.html"));
}

将像localhost:<port>/swagger lib一样提供dropwizard-swagger上的招摇UI。

要使此解决方案正常工作,您还需要生成swagger json文件并将其放入构建目录中的正确路径(资源路径)。 dist folder here The swagger-maven-plugin can help do this for you.有关如何在应用中捆绑静态swagger ui和swagger json的讨论。您需要修改index.html以指向您的swagger json文件。 Here is a link

const ui = SwaggerUIBundle({
    url: "/path/relative/to/your/java/jar/swagger-api.json",
    validatorUrl: null,
    ...
}

选项2

您可以分叉dropwizard-swagger代码,修改包含index.html的{​​{1}}文件。您需要添加它的位置是validatorUrl: null js对象的构造函数。你可以The line of code is here

简而言之:

SwaggerUI

然后,您需要重建库并在项目中包含此window.swaggerUi = new SwaggerUi({ url: url, validatorUrl: null, ... } 库的修改版本。请注意dropwizard-swagger项目see it here

摘要

无论哪种方式,您都需要修改属于swagger ui发行版的index.html文件。最简单的方法可能是暂时忽略错误图标。