Search code examples
jsongsondeserializationlocaldate

Deserialize date attribute of json into LocalDate


I am trying to de-serialize date attribute in json of format "2018-05-27" using Gson. I want date to be in LocalDate format after de-serialization.

For json input :

{ "id" : 1, "name" : "test", "startDate" : "2018-01-01", "endDate" : "2018-01-05", }

I am getting error for startDate and endDate :

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING


Solution

  • The way we can do this is :

    private static final Gson gson = new GsonBuilder().registerTypeAdapter(LocalDate.class, new JsonDeserializer<LocalDate>() {
                @Override
                public LocalDate deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
                    return LocalDate.parse(json.getAsJsonPrimitive().getAsString());
                }
            }).create();
    

    and then

    YourClassName yourClassObject = gson.fromJson(msg, YourClassName.class);