RequestIdClientHttpRequestInterceptor.kt

package com.example.templateproject.client

import org.jboss.logging.MDC
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
import org.springframework.context.annotation.Configuration
import org.springframework.http.HttpRequest
import org.springframework.http.client.ClientHttpRequestExecution
import org.springframework.http.client.ClientHttpRequestInterceptor
import org.springframework.http.client.ClientHttpResponse

@Configuration
@ConditionalOnBean(name = ["requestIdFilter"])
class RequestIdClientHttpRequestInterceptor : ClientHttpRequestInterceptor {
    companion object {
        const val REQUEST_ID_HEADER = "X-Request-ID"
        const val REQUEST_ID_MDC_KEY = "requestId"
    }

    override fun intercept(
        request: HttpRequest,
        body: ByteArray,
        execution: ClientHttpRequestExecution,
    ): ClientHttpResponse {
        val requestId = MDC.get(REQUEST_ID_MDC_KEY)

        if (requestId != null) {
            request.headers.add(REQUEST_ID_HEADER, requestId.toString())
        }
        return execution.execute(request, body)
    }
}