JAX-RS Jackson Json提供程序日期格式问题

6

关于以下问题:

Jersey + Jackson JSON日期格式序列化 - 如何更改格式或使用自定义JacksonJsonProvider

我想知道

  • Jackson是否规定json日期格式应标准化为Unix时间整数?

后续问题...

  • 最近有没有改变其立场?
  • 日期格式不应该标准化为jaxb xml输出提供的相同格式吗?
  • 为什么/为什么不?
  • 是否已经付出努力解决这个问题?
  • RestEasy是否提供了一个JSON提供者缓解,可以以一般可识别的日期格式输出JSON日期?
2个回答

12

抱歉大家,因为我找到了这里的答案而大声喊叫

http://wiki.fasterxml.com/JacksonFAQDateHandling,

这里

http://wiki.fasterxml.com/JacksonFAQ#Serializing_Dates,

这里

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

这里

http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/map/util/StdDateFormat.html

使用 @JsonSerialize(using= ... ) 的方式:

public class JsonStdDateSerializer
extends JsonSerializer<Date> {
  private static final DateFormat iso8601Format =
    StdDateFormat.getBlueprintISO8601Format();

  @Override
  public void serialize(
    Date date, JsonGenerator jgen, SerializerProvider provider)
  throws IOException, JsonProcessingException {

    // clone because DateFormat is not thread-safe
    DateFormat myformat = (DateFormat) iso8601Format.clone();
    String formattedDate = myformat.format(date);
    jgen.writeString(formattedDate);
  }
}

3
有人给这个回答点了踩,能否解释一下为什么?我自己也不太喜欢这个回答,但那是推荐的解决方法。你不能因jaxb和jackson之间存在分歧就责怪我或我的回答,你得向这两个组织表达不满。 - Blessed Geek

2
这也可以通过ObjectMapper上的一个功能来控制(至少在1.9.11版本中,可能还有更早的版本):
ObjectMapper om = new ObjectMapper();
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
om.writer().writeValue(System.out, objectWithDateProperty);

我不知道如何在对象定义本身上以声明的方式完成相同的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接