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

时间:2012-06-27 16:30:54

标签: java json jax-rs jackson resteasy

写下以下问题:

Jersey + Jackson JSON date format serialization - how to change the format or use custom JacksonJsonProvider

我想知道

  • 杰克逊是否指定应将json日期格式规范化为unix时间整数?

后续问题......

  • 最近他的立场是否有变化?
  • 日期格式不应该标准化为jaxb xml输出提供的相同格式吗?
  • 为什么/为什么不呢?
  • 解决这个问题的任何努力?
  • 让RestEasy提供了一个json提供者缓解措施,它会以一般可识别的日期格式输出json日期吗?

2 个答案:

答案 0 :(得分: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(使用= ...)方式:

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);
  }
}

答案 1 :(得分:2)

这也是由ObjectMapper上的一个功能控制的(至少在1.9.11中,可能更早):

ObjectMapper om = new ObjectMapper();
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
om.writer().writeValue(System.out, objectWithDateProperty);

我没有看到如何以声明方式对对象定义本身进行等效。