2012-10-04 14 views
5

Tengo un proyecto en funcionamiento basado en Spring Data REST example project, y estoy tratando de hacer una serialización personalizada utilizando un Jackson module basado en este wiki page.Registrar un módulo Jackson para Spring Data REST

Aquí es mi módulo de Jackson:

public class CustomModule extends SimpleModule { 
    public static Logger logger = LoggerFactory.getLogger(CustomModule.class); 

    public CustomModule() { 
     super("CustomModule", new Version(1, 0, 0, null)); 
    } 

    @Override 
    public void setupModule(SetupContext context) { 
     logger.debug("CustomModule.setupModule"); 
     SimpleSerializers simpleSerializers = new SimpleSerializers(); 
     simpleSerializers.addSerializer(new CustomDateTimeSerializer()); 
     context.addSerializers(simpleSerializers); 
    } 

} 

El wiki page dice:

Cualquier frijol Módulo declarado dentro del ámbito de su Application Context será recogido por el exportador y registrado en su ObjectMapper.

Todavía soy bastante nuevo en Spring, así que podría estar poniendo mi definición de bean de módulo en el lugar equivocado; Actualmente está en src/main/resources/META-INF/spring-data-rest/shared.xml, que se importa de repositories-export.xml:

<bean id="customModule" class="org.hierax.wpa.schema.mapping.CustomModule" /> 

no veo la declaración de registro en setupModule, pero veo salida para otras clases de registro en el mismo paquete.

Estoy usando Spring Data REST 1.0.0.RC2.

+0

¿Alguna vez encontrar una solución a esto? –

+0

No, pero lo he preguntado en el foro de Spring Data, y tal vez reciba una respuesta allí: http://forum.springsource.org/showthread.php?130782-Spring-Data-REST-registering-a- Jackson-module-for-serialization –

Respuesta

4

que he tenido éxito usando la solución se indica en la entrada wiki que ha vinculado a (aunque tal vez ha cambiado desde este puesto de desbordamiento de pila)

En mi caso yo estaba usando la primavera-data-resto- [email protected]

Tu código parece ser correcto y siempre que el contexto de la aplicación se cargue correctamente, no veo ningún motivo para que no funcione.

He adjuntado mi módulo simple que ejemplifica el uso de una fecha formateador:

@Component 
public class JsonMarshallingConfigModule extends SimpleModule { 

    public JsonMarshallingConfigModule() { 
    super("JsonMarshallingConfigModule", new Version(1, 0, 0, "SNAPSHOT")); 
    } 

    @Override public void setupModule(SetupContext context) { 
    context.getSerializationConfig().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'")); 
    } 
} 

Tal vez se puede utilizar para delinear si es de hecho el módulo de Jackson que es el problema o la primavera-Data- rest-mvcweb.

+0

¡Gracias por compartir tu solución! Recientemente me actualicé a [email protected] y migré a la configuración basada en código como en el proyecto de ejemplo, y ahora lo tengo trabajando con la adición de @Component en CustomModule. –

+0

Parece que no puede hacer que funcione. El componente está cargado, puedo ver que se creó la instancia, sin embargo, setupModule() no se invoca. ¿Por qué? –

Cuestiones relacionadas