|
|
@@ -0,0 +1,54 @@ |
|
|
|
package com.ffii.fpsms.api.service |
|
|
|
|
|
|
|
import com.ffii.fpsms.m18.M18Config |
|
|
|
import org.springframework.beans.factory.annotation.Value |
|
|
|
import org.springframework.http.HttpHeaders |
|
|
|
import org.springframework.http.MediaType |
|
|
|
import org.springframework.stereotype.Service |
|
|
|
import org.springframework.util.LinkedMultiValueMap |
|
|
|
import org.springframework.web.reactive.function.client.WebClient |
|
|
|
import org.springframework.web.reactive.function.client.bodyToMono |
|
|
|
import reactor.core.publisher.Mono |
|
|
|
|
|
|
|
@Service |
|
|
|
open class ApiCallerService( |
|
|
|
@Value("\${m18.config.base-url}") private val baseUrl: String, |
|
|
|
private val m18Config: M18Config |
|
|
|
) { |
|
|
|
|
|
|
|
private val webClient: WebClient = WebClient.builder() |
|
|
|
.baseUrl(baseUrl) |
|
|
|
.defaultHeaders { headers -> |
|
|
|
headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) |
|
|
|
headers.set(HttpHeaders.AUTHORIZATION, "Bearer ${m18Config.ACCESS_TOKEN}") |
|
|
|
} |
|
|
|
.build() |
|
|
|
|
|
|
|
fun get(urlPath: String, params: Map<String, String>?, customHeaders: Map<String, String>?): Mono<String> { |
|
|
|
|
|
|
|
return webClient.get() |
|
|
|
.uri { uriBuilder -> |
|
|
|
uriBuilder |
|
|
|
.apply { |
|
|
|
path(urlPath) |
|
|
|
|
|
|
|
// convert to multiValueMap |
|
|
|
params?.let { params -> |
|
|
|
queryParams( |
|
|
|
LinkedMultiValueMap<String, String>().apply { |
|
|
|
params.forEach { (key, values) -> |
|
|
|
add(key, values) |
|
|
|
} |
|
|
|
} |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
.build() |
|
|
|
} |
|
|
|
.headers { headers -> |
|
|
|
customHeaders?.forEach { (k, v) -> headers.set(k, v) } |
|
|
|
} |
|
|
|
.retrieve() |
|
|
|
.bodyToMono(String::class.java) |
|
|
|
} |
|
|
|
} |