Spring

[Spring] Springdoc swagger에서 글로벌 header를 설정하는 방법

Apère 2023. 3. 10. 13:51
반응형

현재 Springdoc을 이용한 swagger를 사용하고 있는데요. 프로젝트를 진행하다보니 글로벌 header를 설정하는 기능이 필요했습니다

일반적으로 header를 파라미터로 받으면 swagger에 생성되는데요. 아래코드처럼 구현하면 됩니다

@Operation(description = "test")
@PostMapping("/test")
public void userLogout(@RequestHeader("headerParam1") String headerParam1) throws Exception {
    log.info(headerParam1);
}

대부분의 메서드에 해당 파라미터가 필요하다면 일일이 넣어주는것은 불편한 일입니다. 그래서 swagger config에 아래 코드를 추가해 주면 간단하게 글로벌 헤더를 추가 할 수 있습니다

@Configuration
public class SwaggerConfig {

    @Bean
    public OperationCustomizer customize() {
        return (operation, handlerMethod) -> {
            operation.addParametersItem(
                new Parameter()
                    .in("header")
                    .required(false)
                    .schema(new StringSchema())
                    .description("헤더파라미터")
                    .name("headerParam1")
            );
            return operation;
        };
    }
}

그런데  일부 메서드는 이 헤더 파라미터가 필요없을 경우도 있게되겠죠. 그렇다면 handlerMethod를 이용하여 조건문을 추가 해주시면 됩니다. 아래 코드를 참고해주세요

@Configuration
public class SwaggerConfig {


    @Bean
    public OperationCustomizer customize() {
        return (operation, handlerMethod) -> {
            if (!handlerMethod.getMethod().getName().equals("excludeHeader")) {
                operation.addParametersItem(
                    new Parameter()
                        .in("header")
                        .required(false)
                        .schema(new StringSchema())
                        .description("헤더파라미터")
                        .name("headerParam1")
                );
            }
            return operation;
        };
    }
}

이렇게 조건문을 추가하게되면 컨트롤러 메서드명 excludeHeader 인 메서드는 headerParam1이 추가되지 않게 됩니다.

반응형