2018년 7월 3일 화요일

Gson DateTimeFormat Deserialize

LocalDateTime이나 LocalDateTime을 Json에서 Class로 Deserialize 할 때 별도 Deserializer를 구현하지 않으면 이런 에러가 난다.

표면적으로는 이런에러가 나고

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column XXX path $.XXXX
Gson 안을 보면

Method threw 'java.lang.NullPointerException' exception. Cannot evaluate java.time.LocalDateTime.toString()
에러를 볼 수 있다.

해결하는 방법은 Deserializer를 구현해주면 된다.

    private val gson = GsonBuilder()
            .registerTypeAdapter(LocalDateTime::class.java, JsonDeserializer { json, _, _ ->
                val time = json.asJsonPrimitive.asString
                LocalDateTime.parse(time, DateTimeFormatter.ISO_DATE_TIME)
            })
            .registerTypeAdapter(LocalDate::class.java, JsonDeserializer { json, _, _ ->
                val date = json.asJsonPrimitive.asString
                LocalDateTime.parse(date, DateTimeFormatter.ISO_DATE)
            })
            .create()



댓글 없음:

댓글 쓰기