杰克逊日期格式与@JsonFormat?

Posted

技术标签:

【中文标题】杰克逊日期格式与@JsonFormat?【英文标题】:Jackson date format with @JsonFormat? 【发布时间】:2014-07-31 07:52:37 【问题描述】:

我想用特定格式序列化 POJO 的某些日历字段。

没有注释,这样的字段:

private Calendar timestamp1;
private Calendar timestamp2;

像这样生成 JSON:

 ..., timestamp1: 1402402106000, timestamp2: 1402488595000, ... 

我想添加一个格式化为字符串的字段,因为它实际上将一天表示为 24 小时单位,而不是特定的时刻。但是当我添加一个带有注释的新字段时:

@JsonFormat(pattern = "yyyy-MM-dd")
private Calendar oneDay;

我希望得到这样的 JSON:

 ..., timestamp1: 1402402106000, timestamp2: 1402488595000, oneDay: "2014-06-12", ... 

相反,我得到了以下异常:

com.fasterxml.jackson.databind.JsonMappingException: 
    Cannot format given Object as a Date 
    (through reference chain: java.util.HashMap["data"]->java.util.ArrayList[0]-myPojo["oneDay"])

我做错了什么?

我正在使用 Jackson 2.2.0

【问题讨论】:

显示您将“oneDay”存储到Date的行。 从数据库中读取所有字段 稍后添加了对@JsonFormat 的支持(我认为是2.3.3);所以你可能想试试 Jackson 2.4.0。 我遇到了同样的问题,可以通过更新到 2.4.2 来解决 【参考方案1】:

这是我用过的:@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")

这对我有用。

【讨论】:

以上是关于杰克逊日期格式与@JsonFormat?的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC - 前端日期格式转后端Date类型

@JsonFormat与@DateTimeFormat注解的使用

Swagger -- 解决日期不正确

Jackson jsonformat始终以UTC格式反序列化

springmvc返回json数据时,日期数据显示为数字的解决方式

springmvc返回json数据时,日期数据显示为数字的解决方式