Jackson JSON日期反序列化到时间戳

时间:2018-09-13 02:53:21

标签: java date serialization jackson2

我正在尝试使用Jackson2的REST方法将JSON映射到POJO。我的POJO中的DueDate属性的类型为java.util.date。 我读到Jackson会默认将JSON反序列化为时间戳。我只想要这种行为。但是,在我的案例中,杰克逊将DueDate属性转换为Date。

任何人都可以帮助我如何让Jackson将 dueDate作为时间戳反序列化

此处的JSON ...

{     “ atr1”:null,     “ atr2”:null,     “ dueDate”:“ 2018-07-11”   }

POJO在这里..

public class Sample {
    private String atr1;
    private String atr1;
    private Date dueDate;
}

REST Api ...

    public Response create(String json) {                                        
            ObjectMapper mapper = new ObjectMapper();
            Sample sample1 = mapper.readValue(json,Sample.class);
 }

谢谢

更多详细信息...从实际的UI对象调用该方法时,DueDate的值类型为时间戳

对象enter image description here

但是,当将JSON传递给REST进行方法调用时,类型将更改为日期enter image description here

我希望它是时间戳类型。因此,使用dueDate作为参数的SQL查询无法正确获取值。

2 个答案:

答案 0 :(得分:1)

您可以在pojo中使用java.sql.timestamp而不是java.util.Date

import java.sql.Timestamp;

public class sample {
    private String atr1;
    private String atr2;
    private Timestamp dueDate;
}

您可以使用与上面相同的操作来访问日期时间戳。我还制作了如下代码段进行确认。

 public static void main( String[] args ) throws JsonParseException, JsonMappingException, IOException
    {
        String json = "{ \"atr1\": null, \"atr2\": null, \"dueDate\": \"2018-07-11\" }";
        ObjectMapper mapper = new ObjectMapper();
        sample sample1 = mapper.readValue(json, sample.class);
        System.out.println(sample1.getDueDate());
    }

以上输出:-2018-07-11 05:30:00.0

答案 1 :(得分:0)

您可以使用@JsonFormat更改json日期模式,如下所示:

public class Sample {
    private String atr1;
    private String atr1;
    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    private Date dueDate;
}

有关更多信息,请阅读以下链接:

https://www.baeldung.com/jackson-jsonformat