0

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

我想转换 JSON --> POJO。

我的Pojo课程有一个名为'created'的日期字段

在 String '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 

Jackson 无法将表示反序列化为 对象。StringDate

我如何配置杰克逊来做到这一点?

4

2 回答 2

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可以避免异常的。
  • created使用asString字段和createdDate字段 创建 POJO Date
  • 在“created”的设置器中,编写转换的逻辑String to Date
  • JSON 将String通过调用 setter 方法正确分配给 POJO created
  • 在 setter 中,string-date conversion逻辑会处理createdDate字段。

希望能帮助到你。

于 2013-07-29T07:43:08.120 回答
1

只要储存它就可以了。要获取长值,请使用 dateObj.getTime(); 要从 long 中创建日期对象,请使用 new Date(longVal)

于 2013-07-29T08:23:08.157 回答