Sto sviluppando un webservice REST in primavera MVC. Ho bisogno di cambiare il modo in cui serialò jackson 2 serializza oggetti mongodb. Non sono sicuro di cosa fare perché ho trovato la documentazione parziale per Jackson 2, quello che ho fatto è quello di creare un serializzatore personalizzato:Spring 3.2 e Jackson 2: aggiunta object mapper personalizzato
public class ObjectIdSerializer extends JsonSerializer<ObjectId> {
@Override
public void serialize(ObjectId value, JsonGenerator jsonGen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jsonGen.writeString(value.toString());
}
}
Creare un ObjectMapper
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
SimpleModule module = new SimpleModule("ObjectIdmodule");
module.addSerializer(ObjectId.class, new ObjectIdSerializer());
this.registerModule(module);
}
}
e quindi registrare il mapper
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="my.package.CustomObjectMapper"></bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
mio CustomConverter non viene mai chiamato. Penso che la definizione di CustomObjectMapper sia errata, l'ho adattata da qualche codice per jackson 1.x
Nei miei controller sto usando @ResponseBody. Dove sto sbagliando? Grazie
Serializer e registrazione mi sembrano corretti, quindi penso che il problema risieda nella configurazione xml. – StaxMan
Sì, grazie per il suggerimento, avevo un tag vuoto attorno al file. Funziona ora –
alex
FYI i documenti dicono di usare StdSerializer invece: http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/ser/std/StdSerializer.html – testing123