Serialize Date in a JSON REST web service as ISO-8601 string
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); }}