Сериализация

data class MyStateObject(val name: String="", val age: Int=-1)

val jsonMapper = jacksonObjectMapper()
val xmlMapper = XmlMapper()

val myStateObject = MyStateObject("Sheldon", 30)

val json = jsonMapper.writeValueAsString(myStateObject)
val xml = xmlMapper.writeValueAsString(myStateObject)
{"name":"Sheldon","age":30}
<MyStateObject><name>Sheldon</name><age>30</age></MyStateObject>

Десериализация

val newJson = json.replace("30", "35")
val newXml = xml.replace("30", "35")

val newJsonObject = jsonMapper.readValue<MyStateObject>(newJson)
val newXmlObject = xmlMapper.readValue<MyStateObject>(newXml)

MyStateObject(name=Sheldon, age=35)
MyStateObject(name=Sheldon, age=35)

Ошибки десериализации

val errorNoField = jsonMapper.readValue<MyStateObject>(
    "{\"name\":\"Sheldon\"}")

MyStateObject(name=Sheldon, age=0)

Ошибки десериализации

val errorWrongField = jsonMapper.readValue<MyStateObject>(
    "{\"surname\":\"Sheldon\",\"age\":35}")

  • Exception in thread “main” com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “surname” (class MyStateObject), not marked as ignorable (2 known properties: “name”, “age”])

Настройка сериализации

@JsonPropertyOrder(value = ["age", "surname"])
data class MyStateObject(
    @JsonProperty("surname") val name: String="",
    val age: Int=-1
)

val json = jsonMapper.writeValueAsString(myStateObject)
val newJson = json.replace("30", "35")
val newJsonObject = jsonMapper.readValue<MyStateObject>(newJson)
{"age":30,"surname":"Sheldon"}
{"age":35,"surname":"Sheldon"}
MyStateObject(name=Sheldon, age=35)