如何使用 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);
我有 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);