Прочитать JSON-файл в Object Kotlin - PullRequest
0 голосов
/ 18 октября 2018

Как я могу прочитать файл JSON и затем поместить его в объекты, определенные в @Document - модель для MongoDB.Я ищу что-то вроде картографа объектов Джексона в Java.Это не работает, потому что Documen - модель не имеет пустого конструктора.

@Document(collection = "XXX")
 class Room(@Id
            private val id: String?,
            private val name: String){there is toString() method}


class Application{

@Bean
fun imageProcess(repo: MongoRepository) = CommandLineRunner {

    println("----------------Save customers!")


    for (room in read("C:/Users/Desktop/new.json")) {
        repo.save(room)
    }

}

val mapper = ObjectMapper().registerModule(KotlinModule())

fun read(path: String): Array<Room>? {

var temp: Array<Room>? = null
try {
    temp = mapper.readValue(File(path), Array<Room>::class.java)
} catch (ex: IOException) {
    ex.printStackTrace()
}

return temp

}

1 Ответ

0 голосов
/ 18 октября 2018

Джексон должен работать вместе с этим модулем: https://github.com/FasterXML/jackson-module-kotlin

"Ранее в объекте Kotlin должен был существовать конструктор по умолчанию, чтобы Джексон мог десериализоваться в объект. С этим модулем можно использовать классы одного конструктора.автоматически, а также поддерживаются вторичные конструкторы или статические фабрики. "

import com.fasterxml.jackson.module.kotlin.*

data class MyStateObject(val name: String, val age: Int)

...
val mapper = jacksonObjectMapper()

val state = mapper.readValue<MyStateObject>(json)
// or
val state: MyStateObject = mapper.readValue(json)
// or
myMemberWithType = mapper.readValue(json)
...