Adding KeyDeserializers and KeySerializers to attempt to fix Jackson mapping error

This commit is contained in:
MrGeoTech 2023-01-04 15:04:26 -06:00
parent a2b04a0350
commit 75e262e292
No known key found for this signature in database
GPG Key ID: 015B8BF2BAD3DEEA
2 changed files with 16 additions and 2 deletions

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.config.profile package de.bixilon.minosoft.config.profile
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.type.MapType import com.fasterxml.jackson.databind.type.MapType
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.collections.CollectionUtil.lockMapOf import de.bixilon.kutil.collections.CollectionUtil.lockMapOf
@ -40,6 +41,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash
import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.terminal.RunConfiguration
import de.bixilon.minosoft.util.json.Jackson import de.bixilon.minosoft.util.json.Jackson
import de.bixilon.minosoft.util.json.ResourceLocationSerializer
import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType

View File

@ -28,19 +28,31 @@ object ResourceLocationSerializer : SimpleModule() {
init { init {
addDeserializer(ResourceLocation::class.java, Deserializer) addDeserializer(ResourceLocation::class.java, Deserializer)
addSerializer(ResourceLocation::class.java, Serializer) addSerializer(ResourceLocation::class.java, Serializer)
addKeyDeserializer(ResourceLocation::class.java, KeyDeserializer)
addKeySerializer(ResourceLocation::class.java, KeySerializer)
} }
object Deserializer : StdDeserializer<ResourceLocation>(ResourceLocation::class.java) { object Deserializer : StdDeserializer<ResourceLocation>(ResourceLocation::class.java) {
override fun deserialize(parser: JsonParser, context: DeserializationContext?): ResourceLocation { override fun deserialize(parser: JsonParser, context: DeserializationContext?): ResourceLocation {
return parser.valueAsString.toResourceLocation() return parser.valueAsString.toResourceLocation()
} }
} }
object Serializer : StdSerializer<ResourceLocation>(ResourceLocation::class.java) { object Serializer : StdSerializer<ResourceLocation>(ResourceLocation::class.java) {
override fun serialize(value: ResourceLocation?, generator: JsonGenerator, provider: SerializerProvider?) { override fun serialize(value: ResourceLocation?, generator: JsonGenerator, provider: SerializerProvider?) {
generator.writeString(value?.toString()) generator.writeString(value?.toString())
} }
} }
object KeyDeserializer : com.fasterxml.jackson.databind.KeyDeserializer() {
override fun deserializeKey(key: String, ctxt: DeserializationContext?): Any {
return key.toResourceLocation()
}
}
object KeySerializer : com.fasterxml.jackson.databind.JsonSerializer<ResourceLocation>() {
override fun serialize(value: ResourceLocation?, gen: JsonGenerator, serializers: SerializerProvider?) {
gen.writeFieldName(value?.toString())
}
}
} }