Невозможно сериализовать / десериализовать DateTime в JSON - PullRequest
0 голосов
/ 24 мая 2018

Я борюсь с этим уже несколько часов, и я оказался в тупике.Кажется, все настроено так же, как и в других вопросах и руководствах по стеку, но объект DateTime не будет сериализован в любом случае.Чего мне не хватает?

Я уже установил JodaModule(), и на мгновение я также отключил ADJUST_DATES_TO_CONTEXT_TIME_ZONE в маппере, потому что текущая ошибка: java.lang.NoSuchFieldError: No static field ADJUST_DATES_TO_CONTEXT_TIME_ZONE, но это не помогло.

Упрощенный код:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModules(new JodaModule());

Book newBook = new Book();
newBook.setCreationtime(new DateTime());

String convertedBook = null;
    try {
        convertedBook = mapper.writeValueAsString(newBook);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }

gradle:

compile 'joda-time:joda-time:2.9.4'
compile files('libs/jackson-datatype-joda-2.9.4.jar')
compile files('libs/jackson-core-2.9.5.jar')

Редактировать: Через некоторое время я почти уверен, что проблема в Book.class:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.joda.JodaModule;

import org.joda.time.DateTime;

import java.io.IOException;
import java.io.Serializable;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModules(new JodaModule());


        try {
            Book newBook = new Book();
            newBook.setId(10);
            newBook.setCreationtime(new DateTime());

            String json = mapper.writeValueAsString(newBook);
            Book newBook2 = mapper.readValue(json, Book.class);
            String result = newBook2.getId() + ", " + newBook2.getCreationtime();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
        "id",
        "creationtime"
    })
    public static class Book implements Serializable {

        @JsonProperty("id")
        private Integer id;
        @JsonProperty("creationtime")
        private DateTime creationtime;

        @JsonProperty("id")
        public Integer getId() {
            return id;
        }

        @JsonProperty("id")
        public void setId(Integer id) {
            this.id = id;
        }

        @JsonProperty("creationtime")
        public DateTime getCreationtime() {
            return creationtime;
        }

        @JsonProperty("creationtime")
        public void setCreationtime(DateTime creationtime) {
            this.creationtime = creationtime;
        }
    }
}
...