Изменить contentHeaders методов Swagger Codegen в kotlin - PullRequest
1 голос
/ 25 сентября 2019

Я использую кодовый код swagger для своих вызовов REST API.В целях аутентификации мне нужно отправить токен сеанса в заголовках каждого запроса.В настоящее время это делается через APIClients 'defaultHeaders

open class ApiClient(val baseUrl: String) {
    companion object {
        ...
        @JvmStatic
        var defaultHeaders: Map<String, String> by ApplicationDelegates.setOnce(mapOf(ContentType to JsonMediaType, Accept to JsonMediaType))
        ...
    }
}

. Способ, которым swagger генерирует код, эти заголовки могут быть изменены только один раз.

ApiClient.defaultHeaders += mapOf("Authorization" to userSession!!.idToken.jwtToken)

Проблема в том,что я не могу изменить токен (например, потому что другой пользователь вошел в систему в течение времени жизни приложения).Если заглянуть глубже в сгенерированный код, перед отправкой каждого запроса выполняется объединение defaultHeaders и requestConfig.headers (= contentHeaders).

inline protected fun <reified T: Any?> request(requestConfig: RequestConfig, body : Any? = null): ApiInfrastructureResponse<T?> {
    ...
    val headers = defaultHeaders + requestConfig.headers
    ...
}

Данный объект RequestConfig приходитс каждого вызова API.Однако изменить эти contentHeaders невозможно.Также они по умолчанию пусты.

fun someAPIRestCall(someParam: kotlin.String) : Unit {
    val localVariableBody: kotlin.Any? = type
    val localVariableQuery: MultiValueMap = mapOf()

    val contentHeaders: kotlin.collections.Map<kotlin.String,kotlin.String> = mapOf() // THESE WILL BE MERGED WITH defaultHeaders
    val acceptsHeaders: kotlin.collections.Map<kotlin.String,kotlin.String> = mapOf("Accept" to "application/json")
    val localVariableHeaders: kotlin.collections.MutableMap<kotlin.String,kotlin.String> = mutableMapOf()
    localVariableHeaders.putAll(contentHeaders)
    localVariableHeaders.putAll(acceptsHeaders)

    val localVariableConfig = RequestConfig(
        RequestMethod.POST,
        "someEndpointURL"),
        query = localVariableQuery,
        headers = localVariableHeaders // THESE WILL BE MERGED WITH defaultHeaders
    )
    val response = request<Unit>(
        localVariableConfig,
        localVariableBody
    )
    ...
}

Можно ли сказать swagger-codegen включить какой-либо параметр в сгенерированную сигнатуру метода для добавления значений к этим contentHeaders?

РЕДАКТИРОВАТЬ:

Это текущий вызов кода в моей цепочке сборки Gradle

task generateSwagger(type: JavaExec) {
    main = "-jar"
    args "swagger-codegen-cli-2.4.7.jar", "generate", "-i", "./swagger_core.yml", "-l", "kotlin", "-o", "./tmp/RestApi", "--type-mappings", "number=kotlin.Long"
}
...