[Java] Jackson ObjectMapper Serialization

 

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

```javastacktrace

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 예제

```kt

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와 변수 이름이 같은 경우에도 ``kt @SerializedName``을 붙여주어야만 함.