2012-06-27 23 views
6

WRT đến câu hỏi sau:JAX-RS Jackson Json Ngày Nhà cung cấp Định dạng Ngày phát hành

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

Tôi muốn biết

  • là Jackson xác định rằng các định dạng ngày json nên bình thường đến một thời gian nguyên unix?

câu hỏi Follow-up ...

  • Có sự thay đổi lập trường của mình bất cứ lúc nào thời gian gần đây?
  • Không phải định dạng ngày được chuẩn hóa thành cùng định dạng được cung cấp bởi đầu ra jaxb xml?
  • lý do tại sao/tại sao không?
  • mọi nỗ lực đưa vào giải quyết vấn đề này?
  • có RestEasy cung cấp giảm thiểu nhà cung cấp dịch vụ json có thể xuất ngày tháng json theo định dạng ngày có thể nhận biết chung không?

Trả lời

11

người Xin lỗi vì la hét thật to - Tôi tìm thấy câu trả lời ở đây

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

đây

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

đây

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

đây

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

Sử dụng @JsonSerialize (sử dụng = ...) cách:

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

Ai đó đã bỏ phiếu cho câu trả lời này. Chăm sóc để giải thích tại sao? Tôi không hoàn toàn thích câu trả lời cho bản thân, nhưng đó là cách được khuyên dùng xung quanh nó. Bạn không thể đổ lỗi cho tôi hoặc câu trả lời của tôi cho sự tồn tại của một bất đồng giữa jaxb và jackson. Bạn sẽ phải đưa ra rant của bạn trên hai tổ chức. –

2

này cũng được kiểm soát bởi một tính năng trên ObjectMapper (ít nhất là trong 1.9.11 và có thể sớm hơn):

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

Tôi không thấy cách khai báo tương đương với định nghĩa đối tượng itsel f.

Các vấn đề liên quan