Подскажите пожалуйста, как документировать пользовательские контроллеры? И есть ли вообще такая возможность?
Добрый день!
Можно попробовать подключить SpringFox. Вроде бы всё должно быть “стандартно” с этим. В интернете много материалов на эту тему, например у Baeldung.
Спасибо за ответ, по ссылке попробовал - не работает, при попытке открыть страницу получаю ошибки Could not navigate to ‘v2/api-docs’ или Could not navigate to ‘swagger-ui’
Похоже, что SpringFox ещё не поддерживает Spring Boot 3. Есть альтернативная библиотека SpringDoc.
Добавьте зависимость в build.gradle:
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
Если хотите использовать встроенный SwaggerUI, а не только генерировать openapi json, то нужно добавить следующее в application.properties. Иначе сервлет ваадина будет перехватывать запросы к swagger-ui:
vaadin.excludeUrls=/swagger-ui/**
Зарегистрируйте бин security filter chain, иначе запросы будут обрабатываться секьюрити от FlowUI конфигурации:
import io.jmix.core.JmixSecurityFilterChainOrder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SpringDocConfig {
/**
* SecurityFilterChain that serves springdoc URLs must have an order less than FlowUI filter chain
*/
@Bean
@Order(JmixSecurityFilterChainOrder.FLOWUI - 10)
public SecurityFilterChain springDocsecurityFilterChain(HttpSecurity http) throws Exception {
http.securityMatcher("/swagger-ui/**", "/v3/api-docs/**")
.authorizeHttpRequests(auth -> auth.anyRequest().permitAll());
return http.build();
}
}
SwaggerUI доступен по ссылке http://localhost:8080/swagger-ui/index.html
OpenAPI JSON: http://localhost:8080/v3/api-docs
Демо-проект: springdoc-sample.zip (174.9 КБ)
большое спасибо, попробую, можно кстати добавить это в документацию, а то там совсем скромно описано
Здравствуйте, попробовал ваш способ, заработал, но если в проекте добавить зависимость implementation ‘io.jmix.rest:jmix-rest-starter’ то ссылка /swagger-ui/index.html ничего не показывает, выходит окно с ошибкой. Можно ли это как то обойти?
Похоже, что проблема в конфликте зависимостей на библиотеки swagger. Я завёл тикет.
Пока что можете попробовать исключить зависимости, которые тащит модуль REST:
implementation ('io.jmix.rest:jmix-rest-starter') {
exclude(group: "io.swagger.core.v3", module: "swagger-core")
exclude(group: "io.swagger.core.v3", module: "swagger-models")
}