Kotlin - kodeeksempler kodeverk
Eksempel som viser hvordan man kan opprette en http klient som kommuniserer med kodeverk ved å bruke Spring i programmeringsspråket Kotlin.
Spring konfigurering:
# application.yaml
api:
client:
yrkesskade_baseurl: https://yrkesskade-ekstern-gateway.nav.no
Klient for å kommunisere med kodeverk:
// KodeverkClient.kt
@Component
class KodeverkClient(
val webClientBuilder: WebClient.Builder,
@Value("\${api.client.yrkesskade_baseurl}") val yrkesskadeBaseurl: String
) {
private val webClient = createWebClient(yrkesskadeBaseurl)
@Retryable
fun hentKodeverkForType(type: String, spraak: String): Map<String, KodeverdiDto>? {
return kallKodeverkApi(type, null)
}
@Retryable
fun hentKodeverkForTypeOgKategori(
type: String,
kategori: String,
spraak: String
): Map<String, KodeverdiDto>? {
return kallKodeverkApi(type, kategori)
}
private fun kallKodeverkApi(
typenavn: String,
kategorinavn: String?,
spraak: String = "nb"
): Map<String, KodeverdiDto>? {
val response = webClient.get().uri { uriBuilder ->
uriBuilder
.pathSegment("api")
.pathSegment("v1")
.pathSegment("kodeverk")
.pathSegment("typer")
.pathSegment(typenavn)
if (kategorinavn != null) {
uriBuilder
.pathSegment("kategorier")
.pathSegment(kategorinavn)
}
uriBuilder.pathSegment("kodeverdier")
uriBuilder.queryParam("spraak", spraak)
uriBuilder.build()
}
.retrieve()
.bodyToMono<KodeverdiResponsDto>()
.block() ?: throw RuntimeException("Kunne ikke hente kodeverkverdier for type $typenavn")
return response.kodeverdierMap
}
/**
* En felles metode for å opprette en webclient med spesifisert URL
*/
fun createWebClient(url: String): WebClient = webClientBuilder
.baseUrl(url)
.clientConnector(ReactorClientHttpConnector(HttpClient.newConnection()))
.build()
}