2017-05-12 4 views
0

나는 REST API와 springfox swagger v2.6.1을 포함하고 작동합니다. 하지만 지금은 모든 컨트롤러를 항상 표시하고 싶지 않습니다. 그 중 일부는 매우 기술적이며 일반 사용자를위한 것이 아니기 때문에 코드를 다시 컴파일하지 않고 표시 할 항목을 선택할 수 있기를 바랍니다. 페이지 상단에 'default (/ v2/api-docs)'(또는 사용자가 구성한 곳)라는 드롭 다운 필드가 있으며이 항목은이 항목 하나만 있습니다. 내 직감은 거기에 여러 옵션을 가질 수 있어야하고, 옵션에 따라 특정 컨트롤러 클래스를 표시할지 여부를 결정해야합니다.swagger에서 API 부품 필터링

이미지를 업로드하는 방법을 모르므로 스크린 샷을 제공 할 수 없습니다. 어쨌든 내 질문이 분명하기를 바랍니다.

내 프로젝트에 자신감이 가능한 간단 수행하는 코드 : 나는 두 ALL 기타 사항 서보 -OFF을 (하고, 일부 속성을 추가하는) 다른 것들에 대한 선택과 같은 여러 가지 방법을 시도

@Bean 
public Docket api() { 

    return new Docket(DocumentationType.SWAGGER_2) 
      .select() 
       .apis(RequestHandlerSelectors.any()) 
       .paths(PathSelectors.any()) 
       .build() 
      .apiInfo(metadata()); 
} 

private ApiInfo metadata() { 
    return new ApiInfoBuilder() 
      .title("My awesome ACS API") 
      .description("All the requests that the server will respond to.") 
      .version("1.0.0") 
      .build(); 
} 

,하지만 난 돈 ' 나는 정말로 내가 달성하기를 희망하는 곳 가까이에있는 것처럼 보입니다.

도움 주셔서 감사합니다.

답변

1

옵션 중 일부는 당신이 SpringSecurity를 ​​사용하여 다른 엔드 포인트에 인증을 추가하고 모두의 엔드 포인트에 액세스 할 수없는 수

  1. 생각할 수있다 (그러나 자신감 UI에 표시됩니다).

  2. 당신이 위에 언급되는 드롭 다운 당신은 완전히 도커 구성에서이 같은가 someting와 자신감 UI에 표시되는 것을 엔드 포인트를 제외 할 수 있습니다이

    @Bean 
    public Docket orderApi() { 
        // This will group the endpoints strting with /order. 
        // And it will be visible as a separate group in the drop down(In Swagger UI) 
        // with the name 'order' as specified in the groupName(..) 
        return new Docket(DocumentationType.SWAGGER_2) 
          .groupName("order") 
          .apiInfo(metadata()) 
          .select() 
          .paths(PathSelectors.ant("/order/**")) 
          .build(); 
    } 
    
    @Bean 
    public Docket orderValidationApi() { 
        return new Docket(DocumentationType.SWAGGER_2) 
          .groupName("product") 
          .apiInfo(metadata()) 
          .select() 
          .paths(PathSelectors.ant("/product/**")) 
          .build(); 
    } 
    
  3. 같은 것을 구성 할 수 있습니다

    return new Docket(DocumentationType.SWAGGER_2) 
         .select() 
          .apis(RequestHandlerSelectors.any()) 
          .paths(PathSelectors.regex("(?!/error).+")).paths(PathSelectors.regex("(?!/product).+")) 
          .build() 
         .apiInfo(metadata()); 
    

    이렇게하면/error 및/product가 아닌 모든 엔드 포인트가 사용 가능하게됩니다. 이처럼 끝 점을 필터링 할 수 있습니다.

+0

감사합니다. 두 번째 대답은 정확하게 내가 찾고있는 것이 었습니다. .groupName ("")이 핵심이었습니다 (디스플레이에 대한 액세스 가능성을 변경하고 싶지 않았기 때문에). 자, 내 경우에는 드롭 다운의 제목이 좋지 않습니다. 고급 (/ acs/docs? group = 고급). 어떤 방식 으로든 나는 그것을 좀 더 사용자 친화적 인 것으로 변경할 수 있습니까? 그렇지 않으면 나는 또한 그걸로 살 수 있습니다 .. 정말 고마워 !! – totee

+0

답변을 주석으로 업데이트했습니다. – pvpkiran

+0

당신을 위해 작동하는 경우 답변을 수락합니까 – pvpkiran