Springfox Swagger: не удалось разрешить указатель: /definitions/Instant

У нас есть проект SpringBoot, и мы используем Springfox Swagger для создания документации API.

Есть класс ответа, который содержит:

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.

Я также пытался использовать трюк Docket в springfox, как показано в Документация Спрингфокс:

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

Безуспешно - то же сообщение об ошибке.

Что я делаю неправильно?

Ваш ответ не должен быть проблемой (я только что проверил). Опубликуйте свою конечную точку и ее конфигурацию или, что еще лучше, создайте Минимальный, полный и проверяемый пример

Januson 08.03.2019 12:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
1
11 669
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я смог воспроизвести эту проблему.

Это можно решить, определив новый AlternateTypeRules при создании Docket для вашего SWAGGER.

Ниже приведен фрагмент.

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

Спасибо :) @VladDinulescu

Naveenkumar K 12.03.2019 07:54

в моем случае работало для List<LocalDate>: TypeResolver typeResolver = new TypeResolver(); return new Docket(DocumentationType.SWAGGER_2) .alternateTypeRules(AlternateTypeRules.newRule(//моя модель List<LocalDate> typeResolver.resolve(List.class, LocalDate.class), // альтернатива для определения JSON typeResolver.resolve(List.class, String.class), Ordered.HIGHEST_PRECEDENCE)) ...

phirzel 06.11.2020 21:18

Тип typeResolver — com.fasterxml.classmate.TypeResolver.

samabcde 07.06.2021 12:01

В моем случае я должен был быть очень конкретным. Я имел:

TreeSet<ZonedDateTime>

Затем мне пришлось специально добавить:

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

НЕТ работал с родительским интерфейсом, таким как: Collection, Set и т. д. в typeResolver. (Кстати, TypeResolver — это @AutoWired, если вам интересно, откуда он взялся. См. документы: https://springfox.github.io/springfox/docs/current/)

Другие вопросы по теме