From b421b4476bc4b7ca89e2df72a98df3f1563d258c Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Thu, 26 Dec 2024 21:49:51 -0500 Subject: [PATCH] [+] Abstract mapper --- .../aqua/sega/util/jackson/BasicMapper.java | 61 ------------------- .../aqua/sega/util/jackson/BasicMapper.kt | 55 +++++++++++++++++ .../aqua/sega/util/jackson/StringMapper.kt | 4 +- 3 files changed, 57 insertions(+), 63 deletions(-) delete mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.kt diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.java deleted file mode 100644 index 25f48388..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -package icu.samnyan.aqua.sega.util.jackson; - -import com.fasterxml.jackson.core.JsonProcessingException; -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.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 BasicMapper { - - private final ObjectMapper mapper; - - public BasicMapper() { - mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, true); - SimpleModule module = new SimpleModule(); - module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0"))); - - module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0"))); - mapper.registerModule(module); - } - - public String write(Object o) throws JsonProcessingException { - return mapper.writeValueAsString(o); - - } - - public T read(String jsonStr, Class toClass) throws JsonProcessingException { - return mapper.readValue(jsonStr, toClass); - } - - public T read(String jsonStr, TypeReference toValueTypeRef) throws JsonProcessingException { - return mapper.readValue(jsonStr, toValueTypeRef); - } - - public T convert(Object map, Class toClass) { - return mapper.convertValue(map, toClass); - } - - public T convert(Object map, TypeReference toValueTypeRef) { - return mapper.convertValue(map, toValueTypeRef); - } - - public LinkedHashMap toMap(Object object) { - return mapper.convertValue(object, new TypeReference<>() { - }); - } -} 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 new file mode 100644 index 00000000..1b7aaf42 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BasicMapper.kt @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.util.jackson + +import com.fasterxml.jackson.core.type.TypeReference +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.databind.module.SimpleModule +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 + +interface IMapper { + fun write(o: Any?): String +} + +@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")) + ) + }) + } + } + + override fun write(o: Any?) = + BASIC_MAPPER.writeValueAsString(o) + + fun read(jsonStr: String?, toClass: Class?) = + BASIC_MAPPER.readValue(jsonStr, toClass) + + fun read(jsonStr: String?, toValueTypeRef: TypeReference?) = + BASIC_MAPPER.readValue(jsonStr, toValueTypeRef) + + 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>() {}) +} 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 index 79302f15..d72559f0 100644 --- a/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.kt @@ -17,8 +17,8 @@ import java.time.format.DateTimeFormatter @Component -class StringMapper { - fun write(o: Any?) = STRING_MAPPER.writeValueAsString(o) +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?) = convert(map, T::class.java) fun toMap(obj: Any?) = STRING_MAPPER.convertValue(obj, object : TypeReference>() {})