Как документировать дополнительные модели в Swagger для недоступного контроллера? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть контроллер, который я должен сохранять универсальным, чтобы он принимал String как @RequestBody и возвращал строку, то есть String processRequest(@RequestBody String json) {...}

У меня нет контроля над исходным кодом этого контроллера, но я могу получить его программно.

Реальные объекты, которые будут переданы и возвращены, определены в другом месте в последовательности сообщений запроса: RequestMessage1.java, RequestMessage2.java и т. Д. Ответы аналогичны: Response1.java, Response2.java1.

Контроллер также передает обработку этих запросов в Processor, который выглядит примерно так (Request1Processor.java): Response1 process(RequestMessage1 message).

Мой вопрос такой.

Есть ли способ настроить swagger таким образом, чтобы он предоставлял конечную точку класса контроллера REST, т. Е. processRequest, но отображал все эти классы процессора с их входами и выходами в качестве документации для этого контроллера?

В документации я видел возможность добавлять модели, которые «недоступны». Я попробовал метод, описанный в документации:

@Autowired
private TypeResolver typeResolver;

@Bean
public Docket api() {
  return new Docket(DocumentationType.SWAGGER_2)
      .select()
      .apis(RequestHandlerSelectors.any())
      .paths(PathSelectors.any())
      .build()
      .additionalModels(typeResolver.resolve(Date.class));
}

Однако дополнительная модель Date не появилась в swagger-ui.html.

Что я здесь не так делаю?

Кроме того, есть ли способ как-то показать, что тип RequestMessage1 будет иметь ответ с Response1?

1 Ответ

0 голосов
/ 15 октября 2018
Класс

Date был неблагоприятным примером для тестирования, поскольку он обрабатывается как строка .

Типы данных

...

  • строка (включая даты и файлы)

Попробуйте еще раз с реальными моделями, которые вы хотите документировать дополнительно:

@Bean
public Docket api(TypeResolver typeResolver) {
    return new Docket(DocumentationType.SWAGGER_2)
          .select()
          .apis(RequestHandlerSelectors.any())
          .paths(PathSelectors.any())
          .build()
          .additionalModels(typeResolver.resolve(RequestMessage1.class, Response1.class)));
}
...