From 2d4bb90acc913633784f8b423c9adf2418a0163d Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Fri, 20 Dec 2024 06:25:41 -0500 Subject: [PATCH] [F] Fix chusan duplicate key --- .../chusan/model/userdata/Chu3UserData.kt | 2 +- .../util/jackson/BooleanStringSerializer.java | 26 -------- .../aqua/sega/util/jackson/StringMapper.java | 54 ----------------- .../aqua/sega/util/jackson/StringMapper.kt | 59 +++++++++++++++++++ 4 files changed, 60 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanStringSerializer.java delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt index cee10412..9c1d581d 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt @@ -3,7 +3,6 @@ package icu.samnyan.aqua.sega.chusan.model.userdata import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonProperty -import com.fasterxml.jackson.annotation.JsonPropertyOrder import com.fasterxml.jackson.databind.annotation.JsonSerialize import icu.samnyan.aqua.net.games.BaseEntity import icu.samnyan.aqua.net.games.IUserData @@ -134,6 +133,7 @@ class Chu3UserData : BaseEntity(), IUserData { @Transient var rankUpChallengeResults: List = emptyList() + // When serialized, this field should be "isNetBattleHost", not "netBattleHost" @JsonProperty("isNetBattleHost") var isNetBattleHost = false var netBattleEndState = 0 diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanStringSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanStringSerializer.java deleted file mode 100644 index 340cca18..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanStringSerializer.java +++ /dev/null @@ -1,26 +0,0 @@ -package icu.samnyan.aqua.sega.util.jackson; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -import java.io.IOException; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -public class BooleanStringSerializer extends StdSerializer { - - public BooleanStringSerializer() { - this(null); - } - - public BooleanStringSerializer(Class t) { - super(t); - } - - @Override - public void serialize(Boolean value, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeString(value.toString()); - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.java deleted file mode 100644 index b955b8c7..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.java +++ /dev/null @@ -1,54 +0,0 @@ -package icu.samnyan.aqua.sega.util.jackson; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.json.JsonWriteFeature; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.LinkedHashMap; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -@Component -public class StringMapper { - - private final ObjectMapper mapper; - - public StringMapper() { - SimpleModule module = new SimpleModule(); - module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - module.addSerializer(Boolean.class, new BooleanStringSerializer()); - module.addSerializer(boolean.class, new BooleanStringSerializer()); - mapper = JsonMapper.builder() - .enable(JsonWriteFeature.WRITE_NUMBERS_AS_STRINGS) - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, true) - .addModule(module) - .build(); - } - - public String write(Object o) throws JsonProcessingException { - return mapper.writeValueAsString(o); - - } - - public T convert(Object map, Class toClass) { - return mapper.convertValue(map, toClass); - } - - public LinkedHashMap toMap(Object object) { - return mapper.convertValue(object, new TypeReference<>() { - }); - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt b/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt new file mode 100644 index 00000000..bf7cda62 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt @@ -0,0 +1,59 @@ +package icu.samnyan.aqua.sega.util.jackson + +import com.fasterxml.jackson.core.JsonGenerator +import com.fasterxml.jackson.core.json.JsonWriteFeature +import com.fasterxml.jackson.core.type.TypeReference +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.databind.SerializerProvider +import com.fasterxml.jackson.databind.module.SimpleModule +import com.fasterxml.jackson.databind.ser.std.StdSerializer +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import org.springframework.stereotype.Component +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + + +//class BooleanStringSerializer(t: Class? = null) : StdSerializer(t) { +// override fun serialize(value: Boolean, gen: JsonGenerator, provider: SerializerProvider) { +// gen.writeString(value.toString()) +// } +//} + + +@Component +class StringMapper { + fun write(o: Any?) = STRING_MAPPER.writeValueAsString(o) + fun convert(map: Any?, toClass: Class?) = STRING_MAPPER.convertValue(map, toClass) + fun toMap(obj: Any?) = STRING_MAPPER.convertValue(obj, object : TypeReference>() {}) + + companion object { + val BOOLEAN_SERIALIZER = object : StdSerializer(Boolean::class.java) { + override fun serialize(v: Boolean, gen: JsonGenerator, p: SerializerProvider) { + gen.writeString(v.toString()) + } + } + var STRING_MAPPER = jacksonObjectMapper().apply { + enable(JsonWriteFeature.WRITE_NUMBERS_AS_STRINGS.mappedFeature()) + configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, true) + findAndRegisterModules() + registerModule(SimpleModule().apply { + addSerializer( + LocalDateTime::class.java, + LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + ) + addDeserializer( + LocalDateTime::class.java, + LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + ) + }) + registerModule(SimpleModule().apply { + addSerializer(Boolean::class.java, BOOLEAN_SERIALIZER) + addSerializer(Boolean::class.javaPrimitiveType, BOOLEAN_SERIALIZER) + }) + } + } +}