sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB-puntos de escape '.' en clave de mapa]

Cuando usa Spring Data MongoDB, obtiene una instancia de:org.springframework.data.mongodb.core.convert.MappingMongoConverter que tiene mapKeyDotReplacement establecido en nulo de forma predeterminada; es por eso que obtiene una excepción.

Debe crear su propia instancia de org.springframework.data.mongodb.core.convert.MappingMongoConverter o simplemente modifique la instancia existente utilizando su método de establecimiento de proveedores:

/**
 * Configure the characters dots potentially contained in a {@link Map} shall be replaced with. By default we don't do
 * any translation but rather reject a {@link Map} with keys containing dots causing the conversion for the entire
 * object to fail. If further customization of the translation is needed, have a look at
 * {@link #potentiallyEscapeMapKey(String)} as well as {@link #potentiallyUnescapeMapKey(String)}.
 * 
 * @param mapKeyDotReplacement the mapKeyDotReplacement to set
 */
public void setMapKeyDotReplacement(String mapKeyDotReplacement) {
    this.mapKeyDotReplacement = mapKeyDotReplacement;
}

En MongoDB, el punto siempre se trata como un carácter especial, por lo que evitarlo probablemente le ahorrará otros dolores de cabeza en el futuro.

EDITAR:Para anular el MappingMongoConverter predeterminado agregue la siguiente declaración de frijol:

  @Bean
  public MappingMongoConverter mongoConverter(MongoDbFactory mongoFactory) throws Exception {
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory);
    MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
    mongoConverter.setMapKeyDotReplacement(".");

    return mongoConverter;
  }