如何使用 joda 日期时间恢复 json 字符串

How can I revert json String with joda Date Time

我有 Pojo

public class Person
{

    private String name;

    @JsonSerialize(using = LocalDateSerializer.class)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    private LocalDate dob;

    public Person()
    {
    }

    public Person(String name, LocalDate dob)
    {
        this.name = name;
        this.dob = dob;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public LocalDate getDob()
    {
        return dob;
    }

    public void setDob(LocalDate dob)
    {
        this.dob = dob;
    }
}

当我尝试运行编码时

public static void main(String[] args) throws IOException{

        Person person = new Person("Bob",new LocalDate(1900,02,22));
        Gson gson = new Gson();
        String json = gson.toJson(person);
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JodaModule());
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);


        Person returnPojo = mapper.readValue(json, Person.class);

        System.out.print(returnPojo);
}

我一直收到异常

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: expected JSON Array, String or Number at [Source: {"name":"Bob","dob":{"iLocalMillis":-2204496000000,"iChronology":{"iBase":{"iMinDaysInFirstWeek":4}}}}; line: 1, column: 14] (through reference chain: pojo.Person["dob"])

我做错了什么?

您正在用 Gson 编写 JSON(它不理解 @JsonSerialize)。由于日期格式不正确,Jackson 无法读取日期。

尝试这样的事情:

    Person person = new Person("Bob",new LocalDate(1900,02,22));

    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JodaModule());
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

    String json = mapper.writer().writeValueAsString(person);

    Person returnPojo = mapper.readValue(json, Person.class);

    System.out.print(returnPojo);