【问题标题】:How to deserialize JSON having a Date type field to POJO.如何将具有日期类型字段的 JSON 反序列化为 POJO。
【发布时间】:2013-07-28 21:31:35
【问题描述】:

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

我想转换 JSON --> POJO。

我的 Pojo 类有一个名为 'created'Date 字段

在字符串 '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 无法反序列化 String 表示为Date 对象。

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

【问题讨论】:

  • “我怎样才能告诉杰克逊这样做?”那很好笑!!在你的 pojo 中提交的 Date 的数据类型是什么?
  • @Sandiip Patil 它是 java.lang.Date
  • 试试 java.util.Date。我有类似的 pojo,我被转换,然后从 JSON 中重新收集,它对我来说很好。
  • 另外,在将时间设置为字段时,您使用的是什么?我的意思是你设置系统时间?你是怎么设置的?
  • 好的,谢谢,现在就试试。

标签: java date jackson deserialization pojo


【解决方案1】:

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

【讨论】:

    【解决方案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 作为String 字段和createdDate 创建POJO Date 字段。
    • 在“created”的设置器中,编写String to Date 转换的逻辑。
    • JSON 将通过在created 上调用setter 方法将String 正确分配给POJO。
    • 在 setter 中,string-date conversion 逻辑将处理 createdDate 字段。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      相关资源
      最近更新 更多