Skip to content

Commit

Permalink
Fix env value not being deserialized into string (#634)
Browse files Browse the repository at this point in the history
* fix: fix env value not being transformed to string

* docs(changeset): Fixed 'value' in actuator environment response not being transformable to string

* Fixes

* Remove unused import
  • Loading branch information
Idane authored Jun 27, 2023
1 parent 13b98ea commit 30a0227
Showing 5 changed files with 78 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .changeset/tricky-turtles-drum.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@krud-dev/ostara-main": patch
---

Fixed 'value' in actuator environment response not being transformable to string
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.krud.boost.daemon.actuator.model

import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import dev.krud.boost.daemon.jackson.ToStringDeserializer
import dev.krud.boost.daemon.utils.TypeDefaults

data class EnvActuatorResponse(
@@ -11,6 +13,7 @@ data class EnvActuatorResponse(
val properties: Map<String, Property>? = null
) {
data class Property(
@JsonDeserialize(using = ToStringDeserializer::class)
val value: String = TypeDefaults.STRING,
val origin: String? = null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package dev.krud.boost.daemon.jackson

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import com.fasterxml.jackson.databind.JsonNode

/**
* Deserialize a property value to a string, even if it's a number or boolean.
*/
class ToStringDeserializer : JsonDeserializer<String>() {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): String {
val node = p.codec.readTree<JsonNode>(p)
return node.toString()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package dev.krud.boost.daemon.actuator.model

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import org.junit.jupiter.api.Test
import strikt.api.expect
import strikt.assertions.isEqualTo

class EnvActuatorResponseTest {
private val objectMapper = jacksonObjectMapper()

@Test
fun `response should deserialize non-string value as string`() {
val json = """
{
"propertySources": [
{
"name": "source",
"properties": {
"some.value": {
"value": {}
}
}
}
]
}
""".trimIndent()

val response = objectMapper.readValue(json, EnvActuatorResponse::class.java)
expect {
that(response.propertySources[0].properties!!["some.value"]!!.value).isEqualTo("{}")
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package dev.krud.boost.daemon.jackson

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import org.junit.jupiter.api.Test
import strikt.api.expectThat
import strikt.assertions.isEqualTo

class ToStringDeserializerTest {
private val objectMapper = jacksonObjectMapper()
private val deserializer = ToStringDeserializer()

@Test
fun `ToStringDeserializer should return stringified object value`() {
val parser = objectMapper.factory.createParser("{}")
val result = deserializer.deserialize(
parser,
objectMapper.deserializationContext,
)
expectThat(result).isEqualTo("{}")
}
}

0 comments on commit 30a0227

Please sign in to comment.