如何将具有日期类型字段的JSON反序列化为POJO。

时间:2013-07-29 07:22:31

标签: java date jackson deserialization pojo

我正在使用Jersey + Jackson开发REST api。

我想转换JSON - > POJO。

我的 Pojo 课程中有日期字段,名为'已创建'

在字符串'jsonUser'中,我有 Pojo 的json表示。

现在,当我使用以下代码将JSON表示转换为Pojo对象时:

ObjectMapper mapper = new ObjectMapper();       
Pojo oldUser = mapper.readValue(jsonUser, Pojo.class);

我收到以下错误:

Exception: Can not construct instance of java.sql.Timestamp from String value '2013-07-29 11:41:00.0': not a valid representation 

杰克逊无法反序列化 String代表到Date个对象。

如何配置 Jackson 来做到这一点?

2 个答案:

答案 0 :(得分:2)

问题可能出在日期转换中。 只需按照以下方式进行:

public class Pojo
{
private String created;
private Date createdDate;

//getter methods. 

//setter methods
public void setCreated(String created)
{
  this.created = created;
  //Logic for converting MySQL-String representation to desired
}

//mapper config
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.setSerializationInclusion(Include.NON_EMPTY);
mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true );
}

Pojo oldUser = mapper.readValue(jsonUser, Pojo.class);
  • 创建mapper,如果不存在值,可以避免异常。
  • 创建POJO,createdString字段,createdDate为。{ Date字段。
  • 在“已创建”的setter中,编写用于转换String to Date
  • 的逻辑
  • JSON将通过调用String上的setter方法正确地将created分配给POJO。
  • 在setter中,string-date conversion逻辑将处理createdDate字段。

希望它有所帮助。

答案 1 :(得分:1)

只需存放它。要获取long值,请使用dateObj.getTime();要从长期使用新日期(longVal)

创建日期对象