Estoy usando Jersey + Jackson para proporcionar la capa de servicios REST JSON para mi aplicación. El problema que tengo es que el formato de serialización por defecto la fecha parece que:Jersey + Jackson JSON serialización de formato de fecha - cómo cambiar el formato o usar JacksonJsonProvider personalizado
"CreationDate":1292236718456
Al principio pensé que se trata de una marca de tiempo UNIX ... pero es demasiado tiempo para eso. Mi biblioteca JS del lado del cliente tiene problemas para deserializar este formato (admite varios formatos de fecha diferentes, pero no este, supongo). Quiero cambiar el formato para que pueda ser consumido por mi biblioteca (a ISO, por ejemplo). ¿Cómo hago eso? Encontré un fragmento de código que podría ayudar pero ... ¿dónde lo pongo ya que no controlo la instanciación del serializador Jackson (lo hace Jersey)?
objectMapper.configure(
SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
También encontré este código de encargo JacksonJsonProvider
- la pregunta es .. ¿cómo hago todas mis clases POJO lo utilizan?
@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;
}
}
}
He encontrado que esto es un cambio entre New Jersey 1.1.5 y 1.6 - Jersey con 1.1.5, la serialización JSON se parece a esto: { "fecha": "2011-04-01T16: 41: 18.707 + 00: 00 "} - tal vez haya un elemento de seguimiento de problemas que proporcione información básica – mjn
sí, es la plomería y la configuración la parte que consume más tiempo. Todavía no me he dado cuenta. Sugiero solo sacar fechas como una cadena, y luego dejar que su cliente se encargue de convertir cadenas en fechas. Se trata de sustituir el código de configuración. Preferiría escribir código que esté 'dentro de mi control' en lugar de misterios de configuración que sé que puedo controlar, pero que a partir de ahora parecen fuera de mi control. Las configuraciones son complicadas sin ejemplos explícitos que, por lo tanto, usan las mismas piezas del kit de herramientas java que está utilizando. La portabilidad es un objetivo digno, pero realmente difícil. – user798719