DolphaGo / TIL

TIL & issues
0 stars 1 forks source link

Jackson: java.util.LinkedHashMap cannot be cast to X #104

Open DolphaGo opened 2 years ago

DolphaGo commented 2 years ago

https://stackoverflow.com/questions/49016372/spring-data-redis-cacheable-java-lang-classcastexception-java-util-linkedhashm

https://www.baeldung.com/jackson-linkedhashmap-cannot-be-cast

DolphaGo commented 2 years ago
class RedisXXXListSerializer(
    private val objectMapper: ObjectMapper
) : RedisSerializer<List<XXX>> {
    override fun serialize(t: List<XXX>?): ByteArray? {
        return if (t == null) {
            return null
        } else try {
            objectMapper.writeValueAsBytes(t)
        } catch (ex: Exception) {
            throw SerializationException("Could not write JSON: " + ex.message, ex)
        }
    }

    override fun deserialize(bytes: ByteArray?): List<XXX> {
        return objectMapper.readValue(bytes, object : TypeReference<List<XXX>>() {})
    }
}

위와 같이 serializer를 만들어서 해결함. 코틀린에서 제네릭으로하면 동일한 이슈(LinkedHashMap으로 읽는 현상)이 발생함. 컴파일 시점에 타입을 지정해줘서 해결할 수 있었음