복붙노트

[SPRING] 청소기 API에서 기본 기본 오류 컨트롤러 방지 [duplicate]

SPRING

청소기 API에서 기본 기본 오류 컨트롤러 방지 [duplicate]

내 봄 부팅 프로젝트에서 swagger2를 사용하고 있습니다. 잘 작동하지만 기본 오류 컨트롤러를 API에서 제외해야합니다. 현재 정규 표현식을 사용하여 다음 코드를 사용하고 있습니다. 작동하지만 완벽하게 수행 할 수있는 방법이 있습니다.

CODE :

@Bean
public Docket demoApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.regex('(?!/error.*).*'))
            .build()
}

해결법

  1. ==============================

    1.Google에서 검색 한 후 GitHub의 한 가지 문제에 대한 해결책을 얻었습니다. [질문] 기본 오류 컨트롤러를 배제 설명에 추가하지 않으려면 어떻게해야합니까? Predicates.not ()을 사용하여 수행 할 수 있습니다.

    Google에서 검색 한 후 GitHub의 한 가지 문제에 대한 해결책을 얻었습니다. [질문] 기본 오류 컨트롤러를 배제 설명에 추가하지 않으려면 어떻게해야합니까? Predicates.not ()을 사용하여 수행 할 수 있습니다.

    Predicates.not ()을 사용하면 코드가 다음과 같이 보입니다.

    @Bean
    public Docket demoApi() {
        return new Docket(DocumentationType.SWAGGER_2)//<3>
                .select()//<4>
                .apis(RequestHandlerSelectors.any())//<5>
                .paths(Predicates.not(PathSelectors.regex("/error.*")))//<6>, regex must be in double quotes.
                .build()
    }
    
  2. ==============================

    2.시간이 많이 걸렸지 만 다른 사람이 같은 문제가있는 경우 RestController에 대한 선택기를 제공하여이를 수행 할 수 있습니다.

    시간이 많이 걸렸지 만 다른 사람이 같은 문제가있는 경우 RestController에 대한 선택기를 제공하여이를 수행 할 수 있습니다.

    new Docket(SWAGGER_2)
                    .select()
                    .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                    .paths(PathSelectors.any())
                    .build();
    

    컨트롤러에는 @RestController 주석이 달려 있습니다.

  3. ==============================

    3.Swagger 문서에 표시된 엔드 포인트를 제한하는 가장 좋은 방법은 다음과 같습니다.

    Swagger 문서에 표시된 엔드 포인트를 제한하는 가장 좋은 방법은 다음과 같습니다.

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(paths())
                .build().apiInfo(metadata());
    }
    
    private Predicate<String> paths() {
        return or(
                regex("/firstContext.*"),
                regex("/secondContext.*"));
    }
    
    private ApiInfo metadata() {
        return new ApiInfoBuilder()
                .title("SomeTitle")
                .description("SomeDescription")
                .build();
    }
    

    따라서 paths () 메소드 컨텍스트로 시작하지 않는 각 끝점은 swagger에 의해 렌더링되지 않습니다.

  4. ==============================

    4.같은 문제가 발생했습니다. 저는 이것을 했어요.

    같은 문제가 발생했습니다. 저는 이것을 했어요.

    java
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xxx.xxx"))
                .paths(PathSelectors.any())
                .build();
    }
    
  5. ==============================

    5.당신이해야한다고 생각하는 모든 API 끝점에 일치하는 일부 정규식을 작성하는 경우 microservices를 실행하는 경우 다음 아마 어쩌면 단지 하나의 단어를 일치하지 않으면 질문에 넣어 뭔가 더 의미가 있습니다 나를.

    당신이해야한다고 생각하는 모든 API 끝점에 일치하는 일부 정규식을 작성하는 경우 microservices를 실행하는 경우 다음 아마 어쩌면 단지 하나의 단어를 일치하지 않으면 질문에 넣어 뭔가 더 의미가 있습니다 나를.

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.regex("/accounts.*"))
            .build();
    }
    
  6. ==============================

    6.사용자 정의 ErrorController를 사용하는 경우

    사용자 정의 ErrorController를 사용하는 경우

    @ApiIgnore
    

    또는

    @Api(hidden = true)
    
    

    예 :

    @Controller
    @ApiIgnore
    class MyErrorController : ErrorController {
    
        @RequestMapping("/error")
        fun handleError(request: HttpServletRequest): String {
            val status: String? = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE)?.toString()
            val statusCode: Int? = status?.toInt()
    
            return when (statusCode) {
                HttpStatus.NOT_FOUND.value() -> return "error-404"
                HttpStatus.INTERNAL_SERVER_ERROR.value() -> return "error-500"
                else -> "error"
            }
        }
    
        override fun getErrorPath(): String {
            return "/error"
        }
    }
    
  7. ==============================

    7.제 경우에는 @Bean으로 메소드를 만들 때 기본 에러 컨트롤러를 보여주지 않을 것입니다.

    제 경우에는 @Bean으로 메소드를 만들 때 기본 에러 컨트롤러를 보여주지 않을 것입니다.

    @Bean을 삭제하면 swagger-ui에 기본 오류 컨트롤러가 표시됩니다.

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                .apis(RequestHandlerSelectors.basePackage(CONTROLLER_PATH))
                .paths(regex("/.*")).build();}
    
  8. from https://stackoverflow.com/questions/33431343/avoiding-default-basic-error-controller-from-swagger-api by cc-by-sa and MIT license