Я использую Jersey + Jackson для предоставления уровня сервиса REST JSON для моего приложения. Проблема заключается в том, что формат сериализации по умолчанию выглядит так:
"CreationDate":1292236718456
Сначала я думал, что это временная метка UNIX... но это слишком долго для этого. У моей клиентской JS-библиотеки есть проблемы, десериализирующие этот формат (он поддерживает кучу разных форматов дат, но не этот, я полагаю). Я хочу изменить формат, чтобы он мог потребляться моей библиотекой (например, по ISO). Как это сделать... Я нашел фрагмент кода, который мог бы помочь, но... где я могу это выразить, поскольку я не контролирую экземпляр Jackson serializer (Джерси)?
objectMapper.configure(
SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
Я также нашел этот код для пользовательского JacksonJsonProvider
- вопрос в том, как... я могу использовать все мои классы POJO?
@Provider
public class MessageBodyWriterJSON extends JacksonJsonProvider {
private static final String DF = "yyyy-MM-dd’T'HH:mm:ss.SSSZ";
@Override
public boolean isWriteable(Class arg0, Type arg1, Annotation[] arg2,
MediaType arg3) {
return super.isWriteable(arg0, arg1, arg2,
arg3);
}
@Override
public void writeTo(Object target, Class arg1, Type arg2, Annotation[] arg3,
MediaType arg4, MultivaluedMap arg5, OutputStream outputStream)
throws IOException, WebApplicationException {
SimpleDateFormat sdf=new SimpleDateFormat(DF);
ObjectMapper om = new ObjectMapper();
om.getDeserializationConfig().setDateFormat(sdf);
om.getSerializationConfig().setDateFormat(sdf);
try {
om.writeValue(outputStream, target);
} catch (JsonGenerationException e) {
throw e;
} catch (JsonMappingException e) {
throw e;
} catch (IOException e) {
throw e;
}
}
}