Post

(Kotlin) Serialization- Gson, Jackson

[Java] Jackson ObjectMapper Serialization

Jackson 역직렬화 시 발생할 수 있는 에러 ( jacksonObjectMapper() )

InvalidDefinitionException: Cannot construct instance of `com.test.example.data.Coffee` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

  • redis에서 받아와서 kotlin data 클래스인 Coffee에 넣으려고 하는데 발생
  • Jackson이 Deserialize 하려면 default constructor가 있어야 하는데, Kotlin data class에는 이게 존재하지 않기 때문에 발생하는 에러임
  • 해결 방법은?https://github.com/FasterXML/jackson-module-kotlin
    • 요약하면 그냥 ObjectMapper() 말고 jacksonObjectMapper()를 쓰면 됨!

gson 예제

1
2
3
4
5
6
7
private val gson = GsonBuilder()

.setFieldNamingPolicy(FieldNamingPolicy.LOWER\_CASE\_WITH\_UNDERSCORES)

.setDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000'XXX")  // Date 타입으로 바로 매핑하기 위해 지정. 이 형식은 ISO 8601
.create();

LOWER\_CASE\_WITH\_UNDERSCORES는 쓰지 않는 것을 권장함. release build하면서 minify가 작동하면 변수 이름이 다 뭉개져서 심지어 json key와 변수 이름이 같은 경우에도 @SerializedName을 붙여주어야만 함.

This post is licensed under CC BY 4.0 by the author.