【问题标题】:serialize list of dates with Jackson用杰克逊序列化日期列表
【发布时间】:2016-07-22 14:20:28
【问题描述】:

我正在尝试序列化一个包含日期列表的对象,并且我想以特定格式 (yyyy-MM-dd) 序列化为日期 (字符串) 的 JSON 列表。

private List<Date> executionDates;

会变成这样:

"executionDates": [
  "2016-07-22",
  "2016-07-23",
  "2016-07-24"
]

可以用注释来做吗?

提前致谢。

【问题讨论】:

  • 注释是什么意思?你是说cmets?另外,你不能序列化一个列表,为了序列化一个列表,你需要将数据放入一个哈希集中,因为哈希集是可序列化的。
  • executionDates 变量的getter 上类似@JsonSerialize(using = JsonDateSerializer.class)

标签: java json serialization jackson date-format


【解决方案1】:

我找到了解决方案。我不得不在这样的注释中使用属性contentUsing 而不是using

@JsonSerialize(contentUsing = JsonDateSerializer.class)

contentUsing 属性用于集合。来自类文档:

用于序列化内容的序列化器类(a 的元素 注释属性的集合/数组,Maps 的值。只能是 用于属性(方法、字段、构造函数),而不是值 类本身(因为它们通常是通用的)。

【讨论】:

  • 致所有观看此内容的人:请考虑私有字段名称和 getter/setter 方法之间的一致性:例如,如果您在私有字段上添加注释,但其公共 getter 方法名称不同,则最终结果不会使用注释功能
【解决方案2】:

试试这样的:

用于序列化:

@Component
public class JsonDateSerializer extends JsonSerializer<Date>
{
    // ISO 8601
    private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    @Override
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException
    {
        String formattedDate = dateFormat.format(date);
        gen.writeString(formattedDate);
    }
}

【讨论】:

  • 我已经尝试过了,但我得到了这个例外:com.fasterxml.jackson.databind.JsonMappingException: java.util.Arrays$ArrayList cannot be cast to java.util.Date。不是应用于 List 中的每个元素,而是应用于整个集合。
  • 你的代码中有这个吗? @JsonSerialize(using=JsonDateSerializer.class) 编辑:您是否尝试将日期设置为变量类型 Date,而不是将数据放入数组列表中?
  • 是的,我有这样的:@JsonSerialize(using = JsonDateSerializer.class) public final List&lt;Date&gt; getExecutionDates() { return executionDates; }。使用变量类型日期而不是日期列表,可以工作,但我想要一个日期列表,而不仅仅是一个日期......
  • 好的,你如何尝试获取列表中的所有内容,并对其进行迭代,并针对每条数据,将这些数据转换为 Date 变量,然后将其序列化?
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 2019-08-04
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多