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이 추가되지 않게 됩니다.
반응형