Serialize Date in a JSON REST web service as ISO-8601 string Serialize Date in a JSON REST web service as ISO-8601 string json json

Serialize Date in a JSON REST web service as ISO-8601 string


I assume your json parser is Jackson, try:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd,HH:00", timezone="CET")public Date date;

(since Jackson 2.0)


The default JBoss parser is Jettison, but I wasn't able to change the date format. So I switched to Jackson and added the following class to my project to configure it:

@Provider@Produces(MediaType.APPLICATION_JSON)public class JacksonConfig implements ContextResolver<ObjectMapper>{    private final ObjectMapper objectMapper;    public JacksonConfig()    {        objectMapper = new ObjectMapper();        objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESPAMPS, false);    }    @Override    public ObjectMapper getContext(Class<?> objectType)    {        return objectMapper;    }}


Sorry people for yelling out loud - I found the answers here

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

here

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

here

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

here

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

Using the @JsonSerialize(using= ... ) way:

public class JsonStdDateSerializerextends 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);  }}