Springfox Swagger:无法解析指针:/definitions/Instant

Springfox Swagger: Could not resolve pointer: /definitions/Instant

我们有一个 SpringBoot 项目,我们正在使用 Springfox Swagger 生成 API 文档。

有一个回复 class 包含:

private Collection<Instant> quartzScheduledDates;

当我 运行 SwaggerUI 时,我收到此消息:

Errors Resolver error at paths./subscriptions/{subscriptionIdStr}.get.responses.200.schema.properties.quartzScheduledDates.items.$ref Could not resolve reference because of: Could not resolve pointer: /definitions/Instant does not exist in document

我们正在使用 Springfox Swagger 2.9.2、SpringBoot 2.1.2-RELEASE。

我也尝试过在 springfox 中使用 Docket 技巧,如 Springfox Documentation:

所示
    docket.directModelSubstitute(Instant.class, java.util.Date.class);

没有成功 - 同样的错误信息。

我做错了什么?

我能够重现这个问题。

这可以通过在为您的 SWAGGER 创建 Docket 时定义新的 AlternateTypeRules 来解决。

下面是片段。

Docket docket= new Docket(DocumentationType.SWAGGER_2)
            .alternateTypeRules( AlternateTypeRules.newRule(
                    typeResolver.resolve(Collection.class, Instant.class),
                    typeResolver.resolve(Collection.class, Date.class), Ordered.HIGHEST_PRECEDENCE))
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.test"))
            .paths(PathSelectors.any())
            .build();

就我而言,我必须非常具体。我有:

TreeSet<ZonedDateTime>

那我还得特意补充一下:

AlternateTypeRules.newRule(
    typeResolver.resolve(TreeSet.class, ZonedDateTime.class),
    typeResolver.resolve(TreeSet.class, Date.class), Ordered.HIGHEST_PRECEDENCE))

与父接口一起工作,例如 typeResolver 中的 CollectionSet 等。 (顺便说一句,TypeResolver 是@AutoWired,如果您想知道它来自哪里。请参阅文档:https://springfox.github.io/springfox/docs/current/