본문 바로가기
Spring

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

by Apère 2023. 3. 10.
반응형

현재 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이 추가되지 않게 됩니다.

반응형

댓글