MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment stocker le champ Date en tant que ISODate() en utilisant jackson dans MongoDb

Ce qu'il vous faut, c'est le module Jackson Joda. Si vous importez cela dans votre chemin de classe, vous pouvez faire ce qui suit sur votre mappeur pour l'écrire comme l'horodatage souhaité :

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
mapper.writeValueAsString(date);

Vous pouvez remplacer date dans l'exemple de code ci-dessus avec votre POJO si nécessaire.

Edit :Il semble que ce que vous voulez vraiment, c'est un sérialiseur personnalisé. Cela ressemblerait à ceci :

public class IsoDateSerializer extends JsonSerializer<DateTime> {
    @Override
    public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) {
        String isoDate = ISODateTimeFormat.dateTime().print(value);
        jgen.writeRaw("ISODATE(\"" + isoDate + "\")");
    }

Ensuite, soit vous l'enregistrerez sur le mappeur pour tous les types DateTime

mapper.addSerializer(DateTime.class, new IsoDateSerializer());

ou précisez-le sur la fonction à l'aide d'annotations

@JsonSerializer(using = IsoDateSerializer.class)
public DateTime createdTime;