2

Я сейчас в процессе тестирования Swagger2 на моем проекте SpringBoot (он отлично работает), однако он только поднимает мои классы @RestController.Swagger2> Документ SpringBoot MvcEndpoint

мне было интересно:

  1. Может ли он быть использован, чтобы забрать Spring-ActuatorMvcEndpoint?
  2. Могут ли компоненты Swagger2 (например, /swagger-ui.html, /v2/api-docs) размещаться под номером management port (e.g. http://${management.address}:${management.port}), а не server.port?

Application.java

@EnableSwagger2 
@SpringBootApplication 
public class Application { 
    @Bean 
    public Docket api() { 
     return new Docket(DocumentationType.SWAGGER_2) 
       .select() 
       .apis(RequestHandlerSelectors.any()) 
       .paths(PathSelectors.any()) 
       .build(); 
    } 
} 

AdminController.java (так называемый пользовательский конечной точки привода)

@Component 
public class AdminController implements MvcEndpoint { ... } 

application.yml

server.port: 8080 
management.address: 127.0.0.1 
management.port: 8081 

build.gradle

compile("org.springframework.boot:spring-boot-starter-actuator") 
compile "io.springfox:springfox-swagger2:2.5.0" 
compile "io.springfox:springfox-swagger-ui:2.5.0" 

Версии:

  • SpringBoot: 1.4.0.RELEASE
  • Gradle: 3.0

ответ

2

Да, это eaiser, чтобы настроить его т o выбирайте эксцентриковые конечные точки с пружинным приводом-стартером.

Ключевым моментом является добавление предиката customerize RequestHandlerSelectors, com.example.Swagger2Config.RequestHandlerSelectors является хорошим примером для начинающих.

Ниже класс конфигурации:

@Configuration 
@EnableSwagger2 
public class Swagger2Config { 
    @Bean 
    public Docket actuator() { 
     return new Docket(DocumentationType.SWAGGER_2) 
       .groupName("Spring Boot Actuator") 
       .select() 
       .apis(RequestHandlerSelectorsExt.withInterface()) 
       .paths(PathSelectors.any()) 
       .build(); 
    } 

    @Bean 
    public Docket api() { 
     return new Docket(DocumentationType.SWAGGER_2) 
       .groupName("App") 
       .select() 
       .apis(RequestHandlerSelectors.any()) 
       .paths(PathSelectors.any()) 
       .build(); 
    } 

    static class RequestHandlerSelectorsExt { 
     public static Predicate<RequestHandler> withInterface() { 
      return new Predicate<RequestHandler>() { 
       @Override 
       public boolean apply(RequestHandler input) { 
        return declaringClass(input) == EndpointMvcAdapter.class; 
       } 
      }; 
     } 

     private static Class<?> declaringClass(RequestHandler input) { 
      return input.getHandlerMethod().getMethod().getDeclaringClass(); 
     } 
    } 
} 

Тогда вы можете получить API в развязность ш. enter image description here

Проект demo в github.

2) Я действительно не знаю, какое ваше точное значение «адрес: порт, а не server.port», очевидно, что он размещен в «адресе: порт», как «localhost: 8080», пожалуйста, добавьте больше информации для этого.

+0

Привет, Liping, я имел в виду [порт управления, то есть 'http: // $ {management.address}: $ {management.port}'] (http://docs.spring.io/spring-boot/docs/ current/reference/html/production-ready-monitoring.html # production-ready-customizing-management-server-address), который может отличаться от 'server.port'. –

+0

@NickGrealy Боюсь, вы не можете этого сделать. –