From 5375c3c1fa47c70d012dd9037c6afe92929d13f3 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Tue, 11 Mar 2025 02:48:31 -0400 Subject: [PATCH] [F] Fix json --- .../aqua/sega/chusan/ChusanController.kt | 7 +- .../aqua/sega/chusan/handler/ChusanCMApis.kt | 9 +- .../sega/chusan/handler/ChusanUpsertApis.kt | 2 +- .../samnyan/aqua/sega/general/BaseHandler.kt | 2 +- .../sega/maimai2/Maimai2ServletController.kt | 7 +- .../sega/ongeki/model/userdata/UserRival.java | 2 - .../util/jackson/AccessCodeSerializer.java | 27 ----- .../aqua/sega/util/jackson/BasicMapper.kt | 105 ++++++++++++------ .../jackson/BooleanNumberDeserializer.java | 19 ---- .../util/jackson/BooleanNumberSerializer.java | 26 ----- .../jackson/BooleanToIntegerDeserializer.kt | 23 ---- .../sega/util/jackson/ByteBufSerializer.java | 30 ----- .../aqua/sega/util/jackson/Serializers.kt | 47 ++++++++ .../aqua/sega/util/jackson/StringMapper.kt | 53 --------- .../sega/util/jackson/UserIdSerializer.java | 27 ----- .../jackson/ZonedDateTimeDeserializer.java | 19 ---- 16 files changed, 133 insertions(+), 272 deletions(-) delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/AccessCodeSerializer.java delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberDeserializer.java delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberSerializer.java delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanToIntegerDeserializer.kt delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/ByteBufSerializer.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/Serializers.kt delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/UserIdSerializer.java delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/ZonedDateTimeDeserializer.java diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt index 03444005..4e592135 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt @@ -62,21 +62,22 @@ class ChusanController( val token = TokenChecker.getCurrentSession()?.token?.substring(0, 6) ?: "NO-TOKEN" log.info("Chu3 < $api : ${data.toJson()} : [$token]") + val noop = """{"returnCode":"1","apiName":"$api"}""" if (api !in noopEndpoint && !handlers.containsKey(api)) { log.warn("Chu3 > $api not found") - return """{"returnCode":"1","apiName":"$api"}""" + return noop } // Only record the counter metrics if the API is known. Metrics.counter("aquadx_chusan_api_call", "api" to api).increment() if (api in noopEndpoint) { log.info("Chu3 > $api no-op") - return """{"returnCode":"1"}""" + return noop } return try { Metrics.timer("aquadx_chusan_api_latency", "api" to api).recordCallable { - serialize(api, handlers[api]!!(ctx)).also { + serialize(api, handlers[api]!!(ctx) ?: noop).also { if (api !in setOf("GetUserItemApi", "GetGameEventApi")) log.info("Chu3 > $api : $it") } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt index ad983f78..d72cfa94 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt @@ -1,6 +1,5 @@ package icu.samnyan.aqua.sega.chusan.handler -import com.fasterxml.jackson.core.type.TypeReference import ext.* import icu.samnyan.aqua.sega.chusan.ChusanController import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserGacha @@ -29,7 +28,7 @@ fun ChusanController.cmApiInit() { val (gachaId, placeId) = parsing { data["gachaId"]!!.int to data["placeId"]!!.int } val u = db.userData.findByCard_ExtId(uid)() ?: return@api null - val upsertUserGacha = parsing { mapper.convert(data["cmUpsertUserGacha"], UpsertUserGacha::class.java) } + val upsertUserGacha = parsing { mapper.convert(data["cmUpsertUserGacha"]!!) } upsertUserGacha.gameGachaCardList?.let { lst -> db.userCardPrintState.saveAll(lst.map { @@ -63,7 +62,7 @@ fun ChusanController.cmApiInit() { } "CMUpsertUserPrintCancel" { - val orderIdList: List = cmMapper.convert(data["orderIdList"], object : TypeReference>() {}) + val orderIdList: List = cmMapper.convert>(parsing { data["orderIdList"]!! }) db.userCardPrintState.saveAll(orderIdList.mapNotNull { // TODO: The original code by Eori writes findById but I don't think that is correct... @@ -76,8 +75,8 @@ fun ChusanController.cmApiInit() { } "CMUpsertUserPrintSubtract" api@ { - val userCardPrintState = cmMapper.convert(data["userCardPrintState"], UserCardPrintState::class.java) - val userItemList = cmMapper.convert(data["userItemList"], object : TypeReference>() {}) + val userCardPrintState = cmMapper.convert(parsing { data["userCardPrintState"]!! }) + val userItemList = cmMapper.convert>(parsing { data["userItemList"]!! }) val u = db.userData.findByCard_ExtId(uid)() ?: return@api null diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanUpsertApis.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanUpsertApis.kt index 36425071..fb40e9db 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanUpsertApis.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanUpsertApis.kt @@ -17,7 +17,7 @@ fun ChusanController.upsertApiInit() { } "UpsertUserAll" api@ { - val req = mapper.convert(data["upsertUserAll"], UpsertUserAll::class.java) + val req = parsing { mapper.convert(data["upsertUserAll"]!!) } req.run { // UserData diff --git a/src/main/java/icu/samnyan/aqua/sega/general/BaseHandler.kt b/src/main/java/icu/samnyan/aqua/sega/general/BaseHandler.kt index 1b0d6e88..0a11905a 100644 --- a/src/main/java/icu/samnyan/aqua/sega/general/BaseHandler.kt +++ b/src/main/java/icu/samnyan/aqua/sega/general/BaseHandler.kt @@ -30,7 +30,7 @@ typealias PagePost = (MutJDict) -> Unit data class PagedProcessor(val add: JDict?, val fn: PagedHandler, var post: PagePost? = null) // A very :3 way of declaring APIs -abstract class MeowApi(val serialize: (String, Any?) -> String) { +abstract class MeowApi(val serialize: (String, Any) -> String) { val initH = mutableMapOf() infix operator fun String.invoke(fn: SpecialHandler) = initH.set("${this}Api", fn) infix fun String.static(fn: () -> Any) = serialize(this, fn()).let { resp -> this { resp } } diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt index e88bc438..5ec2afc0 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt @@ -68,9 +68,10 @@ class Maimai2ServletController( @API("/{api}") fun handle(@PathVariable api: String, @RequestBody data: Map, req: HttpServletRequest): Any { logger.info("Mai2 < $api : ${data.toJson()}") // TODO: Optimize logging + val noop = """{"returnCode":1,"apiName":"com.sega.maimai2servlet.api.$api"}""" if (api !in noopEndpoint && !handlers.containsKey(api)) { logger.warn("Mai2 > $api not found") - return """{"returnCode":1,"apiName":"com.sega.maimai2servlet.api.$api"}""" + return noop } // Only record the counter metrics if the API is known. @@ -78,13 +79,13 @@ class Maimai2ServletController( if (api in noopEndpoint) { logger.info("Mai2 > $api no-op") - return """{"returnCode":1,"apiName":"com.sega.maimai2servlet.api.$api"}""" + return noop } return try { Metrics.timer("aquadx_maimai2_api_latency", "api" to api).recordCallable { val ctx = RequestContext(req, data.mut) - serialize(api, handlers[api]!!(ctx)).also { + serialize(api, handlers[api]!!(ctx) ?: noop).also { logger.info("Mai2 > $api : ${it.truncate(1000)}") } } diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserRival.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserRival.java index ca0f9d16..ff469bf0 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserRival.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserRival.java @@ -2,8 +2,6 @@ package icu.samnyan.aqua.sega.ongeki.model.userdata; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import icu.samnyan.aqua.sega.util.jackson.UserIdSerializer; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/AccessCodeSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/AccessCodeSerializer.java deleted file mode 100644 index f031ccd2..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/AccessCodeSerializer.java +++ /dev/null @@ -1,27 +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 icu.samnyan.aqua.sega.general.model.Card; - -import java.io.IOException; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -public class AccessCodeSerializer extends StdSerializer { - - public AccessCodeSerializer() { - this(null); - } - - public AccessCodeSerializer(Class t) { - super(t); - } - - @Override - public void serialize(Card value, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeString(value.getLuid()); - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.kt b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.kt index 1b7aaf42..71d6cf54 100644 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.kt +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.kt @@ -1,55 +1,94 @@ 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.ObjectMapper 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 ext.jsonArray import org.springframework.stereotype.Component import java.time.LocalDateTime import java.time.format.DateTimeFormatter -interface IMapper { - fun write(o: Any?): String +open class IMapper(val mapper: ObjectMapper) { + fun write(o: Any): String = mapper.writeValueAsString(o) + fun convert(map: Any, to: Class) = mapper.convertValue(map, to) + fun convert(map: Any, to: TypeReference): T = mapper.convertValue(map, to) + fun read(json: String, to: Class) = mapper.readValue(json, to) + fun read(json: String, to: TypeReference) = mapper.readValue(json, to) + + inline fun convert(map: Any): T = convert(map, object : TypeReference() {}) + inline fun read(json: String): T = read(json, object : TypeReference() {}) +} + +val BASIC_MAPPER = jacksonObjectMapper().apply { + 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.0")) + ) + addDeserializer( + LocalDateTime::class.java, + LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0")) + ) + }) } @Component -class BasicMapper: IMapper { - companion object { - val BASIC_MAPPER = jacksonObjectMapper().apply { - 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.0")) - ) - addDeserializer( - LocalDateTime::class.java, - LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0")) - ) - }) - } +class BasicMapper: IMapper(BASIC_MAPPER) + + + +val BOOLEAN_SERIALIZER = object : StdSerializer(Boolean::class.java) { + override fun serialize(v: Boolean, gen: JsonGenerator, p: SerializerProvider) { + gen.writeString(v.toString()) } +} - override fun write(o: Any?) = - BASIC_MAPPER.writeValueAsString(o) +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")) + ) + addSerializer(Boolean::class.javaObjectType, BOOLEAN_SERIALIZER) + addSerializer(Boolean::class.javaPrimitiveType, BOOLEAN_SERIALIZER) + }) +} - fun read(jsonStr: String?, toClass: Class?) = - BASIC_MAPPER.readValue(jsonStr, toClass) +@Component +class StringMapper: IMapper(STRING_MAPPER) - fun read(jsonStr: String?, toValueTypeRef: TypeReference?) = - BASIC_MAPPER.readValue(jsonStr, toValueTypeRef) +class A { + var cat = "" +} - fun convert(map: Any?, toClass: Class?) = - BASIC_MAPPER.convertValue(map, toClass) - - fun convert(map: Any?, toValueTypeRef: TypeReference?) = - BASIC_MAPPER.convertValue(map, toValueTypeRef) - - fun toMap(obj: Any?): LinkedHashMap = - BASIC_MAPPER.convertValue(obj, object : TypeReference>() {}) +fun main(args: Array) { + val json = """{"cat":"meow"}""" + val a = BasicMapper().read(json, A::class.java) + println(a.cat) + val lst = """[{"cat":"meow"}, {"cat":"meow"}]""" + val b = BasicMapper().convert(lst.jsonArray(), object : TypeReference>() {}) + println(b[0].cat) + println(b.size) + val c = BasicMapper().convert>(lst.jsonArray()) + println(c[0].cat) } diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberDeserializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberDeserializer.java deleted file mode 100644 index aafbc91a..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberDeserializer.java +++ /dev/null @@ -1,19 +0,0 @@ -package icu.samnyan.aqua.sega.util.jackson; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import java.io.IOException; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -public class BooleanNumberDeserializer extends JsonDeserializer { - - @Override - public Boolean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return !"0".equals(p.getText()); - } - -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberSerializer.java deleted file mode 100644 index 66532c6b..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberSerializer.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 BooleanNumberSerializer extends StdSerializer { - - public BooleanNumberSerializer() { - this(null); - } - - public BooleanNumberSerializer(Class t) { - super(t); - } - - @Override - public void serialize(Boolean value, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeNumber(value ? 1 : 0); - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanToIntegerDeserializer.kt b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanToIntegerDeserializer.kt deleted file mode 100644 index cb34a5b1..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanToIntegerDeserializer.kt +++ /dev/null @@ -1,23 +0,0 @@ -package icu.samnyan.aqua.sega.util.jackson - -import com.fasterxml.jackson.core.JsonParser -import com.fasterxml.jackson.core.JsonToken -import com.fasterxml.jackson.databind.DeserializationContext -import com.fasterxml.jackson.databind.JsonDeserializer -import ext.int - -class BooleanToIntegerDeserializer : JsonDeserializer() { - override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Int { - return when (p.currentToken) { - JsonToken.VALUE_STRING -> when (val str = p.valueAsString.lowercase()) { - "true" -> 1 - "false" -> 0 - else -> str.int - } - JsonToken.VALUE_NUMBER_INT -> p.intValue - JsonToken.VALUE_TRUE -> 1 - JsonToken.VALUE_FALSE -> 0 - else -> throw UnsupportedOperationException("Cannot deserialize to boolean int") - } - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/ByteBufSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/ByteBufSerializer.java deleted file mode 100644 index 88b62122..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/ByteBufSerializer.java +++ /dev/null @@ -1,30 +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 io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; - -import java.io.IOException; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -public class ByteBufSerializer extends StdSerializer { - - public ByteBufSerializer() { - this(null); - } - - public ByteBufSerializer(Class t) { - super(t); - } - - @Override - public void serialize(ByteBuf value, JsonGenerator gen, SerializerProvider provider) throws IOException { - - gen.writeString(ByteBufUtil.hexDump(value)); - - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/Serializers.kt b/src/main/java/icu/samnyan/aqua/sega/util/jackson/Serializers.kt new file mode 100644 index 00000000..369591a5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/Serializers.kt @@ -0,0 +1,47 @@ +package icu.samnyan.aqua.sega.util.jackson + +import com.fasterxml.jackson.core.JsonGenerator +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.core.JsonToken +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.JsonDeserializer +import com.fasterxml.jackson.databind.SerializerProvider +import com.fasterxml.jackson.databind.ser.std.StdSerializer +import ext.int +import icu.samnyan.aqua.sega.general.model.Card +import java.time.ZonedDateTime + +class AccessCodeSerializer @JvmOverloads constructor(t: Class? = null) : StdSerializer(t) { + override fun serialize(value: Card, gen: JsonGenerator, provider: SerializerProvider) { + gen.writeString(value.luid) + } +} + +class BooleanToIntegerDeserializer : JsonDeserializer() { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = when (p.currentToken) { + JsonToken.VALUE_STRING -> when (val str = p.valueAsString.lowercase()) { + "true" -> 1 + "false" -> 0 + else -> str.int + } + JsonToken.VALUE_NUMBER_INT -> p.intValue + JsonToken.VALUE_TRUE -> 1 + JsonToken.VALUE_FALSE -> 0 + else -> throw UnsupportedOperationException("Cannot deserialize to boolean int") + } +} + +class BooleanNumberSerializer @JvmOverloads constructor(t: Class? = null) : StdSerializer(t) { + override fun serialize(value: Boolean, gen: JsonGenerator, provider: SerializerProvider) { + gen.writeNumber(if (value) 1 else 0) + } +} + +class BooleanNumberDeserializer : JsonDeserializer() { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = "0" != p.text +} + +class ZonedDateTimeDeserializer : JsonDeserializer() { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = ZonedDateTime.parse(p.text) +} + 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 deleted file mode 100644 index 4335763a..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt +++ /dev/null @@ -1,53 +0,0 @@ -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 ext.jsonArray -import ext.jsonMap -import org.springframework.stereotype.Component -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter - - -@Component -class StringMapper: IMapper { - override fun write(o: Any?) = STRING_MAPPER.writeValueAsString(o) - fun convert(map: Any?, toClass: Class?) = STRING_MAPPER.convertValue(map, toClass) - final inline fun convert(map: Any?) = STRING_MAPPER.convertValue(map, object : TypeReference() {}) - 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")) - ) - addSerializer(Boolean::class.javaObjectType, BOOLEAN_SERIALIZER) - addSerializer(Boolean::class.javaPrimitiveType, BOOLEAN_SERIALIZER) - }) - } - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/UserIdSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/UserIdSerializer.java deleted file mode 100644 index c17a1841..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/UserIdSerializer.java +++ /dev/null @@ -1,27 +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 icu.samnyan.aqua.sega.ongeki.model.userdata.UserData; - -import java.io.IOException; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -public class UserIdSerializer extends StdSerializer { - - public UserIdSerializer() { - this(null); - } - - public UserIdSerializer(Class t) { - super(t); - } - - @Override - public void serialize(UserData value, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeNumber(value.getCard().getExtId()); - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/ZonedDateTimeDeserializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/ZonedDateTimeDeserializer.java deleted file mode 100644 index fcdaa23c..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/ZonedDateTimeDeserializer.java +++ /dev/null @@ -1,19 +0,0 @@ -package icu.samnyan.aqua.sega.util.jackson; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import java.io.IOException; -import java.time.ZonedDateTime; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -public class ZonedDateTimeDeserializer extends JsonDeserializer { - - @Override - public ZonedDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return ZonedDateTime.parse(p.getText()); - } -}