Primero verifique que el escaneo de arrogancia esté habilitado, habilite: verdadero; después de que la ruta de escaneo esté configurada correctamente, todavía no se muestra
Springboot2.6 + swagger2.9.2 no puede escanear la solución del problema de la interfaz
En un entorno de múltiples módulos, swaggerConfig está configurado en el módulo público y se descubre que algunos módulos no pueden escanear la interfaz del Controlador. Como se muestra abajo:
Después de la inspección, algunos módulos olvidaron agregar la siguiente configuración:
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
Adjunte la dependencia SwaggerConfig (que se encuentra en Internet)
como springfox-boot-starter
@Configuration
@EnableOpenApi
clase pública SwaggerConfig {
@Bean
public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) .enable(true) //Si habilitar swagger .apiInfo(apiInfo()) //Establecer qué interfaces están expuestas a Swagger display.select () // Escanear todas las API anotadas es más flexible de esta manera.apis (RequestHandlerSelectors.withClassAnnotation(Api.class)) // .paths(PathSelectors.any()) //¡Esto filtrará todas las rutas! .build(); }
private ApiInfo apiInfo() { // Personalizar con ApiInfoBuilder return new ApiInfoBuilder() // Establecer título.título ("título") // Descripción.descripción ("Descripción") // Información del autor.contacto(nuevo contacto("nombre de usuario " , "sitio web", "correo")) // versión.version("número de versión:" + "1.0") .build(); }
/**
* Springboot2.6 entrará en conflicto con springfox incluso si está equipado con ant_path_matcher
* Resolver la incompatibilidad entre springboot2.6 y springfox No se pudo iniciar el bean 'documentationPluginsBootstrapper'; excepción anidada...
*
* @return
*/
@Bean
public BeanPostProcessor estático springfoxHand lerProviderBeanPostProcessor() { return new BeanPostProcessor() {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) lanza BeansException { if (bean instancia de WebMvcRequestHandlerProvider || bean instancia de WebFluxRequestHandlerProvider) { personalizarSpringfoxHandlerMappings(getHandlerMappings(bean)); } retorno de frijol; }
privado <T extiende RequestMappingInfoHandlerMapping> void personalizarSpringfoxHandlerMappings(Lista<T> asignaciones) { Lista<T> copia = mapeos.stream() .filter(mapping -> mapeo.getPatternParser() == null) .collect(Collectors.toList() ); mapeos.clear(); mapeos.addAll(copiar); }
@SuppressWarnings("unchecked")
lista privada<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) { try { Campo de campo = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); campo.setAccessible(verdadero);
return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
} catch (IllegalArgumentException | IllegalAccessException e) { throw new IllegalStateException(e); } } }; }